ASP.NET MVC 設定 Route 使 URL 中不顯示 controller 名

來源:互聯網
上載者:User

引言

在Visual Studio 2008建立ASP.NET MVC 1.0項目時自動產生的例子中,預設的Route是{controller}/{action}/{id},這裡的id是參數,可以省略,但是得有controller和action這就使得在URL中要指明Controller和Action。比如我要訪問那個例子中的登陸頁,就要寫成http://localhost/account/login.如果我們的account系統是單獨開發的,一般已經設定了名為account的虛擬目錄,如果還要在url中指明controller是account,url就會變成類似http://localhost/account/account/login的樣子。下面要做的就是省略url中的controller。其實類似將Account View裡的內容放到根目錄下,但我們不能直接這麼做,而是修改route規則。這種方式比較適合已經處在虛擬目錄中且只有一個controller的應用程式,如果應用程式邏輯比較複雜且controller較多就不太適合了.

實現

最終要實現的是用類似http://localhost/{action}的url替代原來的http://localhost/account/{action},原http://localhost/Home/{action}不受影響。首先在global.asax的RegisterRoutes方法中將原有的routes.MapRoute塊替換為

 

1routes.MapRoute(
2                "test",
3                "{action}",
4                new { controller = "Account", action = "Login" }
5                );

 

其中test為規則名,{action}為匹配URL的規則,new { controller = "Account", action = "Login" }表示預設的controller為account,預設action為login,由於匹配的url中都沒有提供contrller名,所以url匹配此規則的請求最終使用的contrller都是account。這樣url中就不用再出現contrller名了。但是這樣做了以後/Home/{action}下的內容就無法訪問了的,如果要使Home下的內容也能訪問,需要再添加一個Route規則來匹配/Home/{action},我們在剛才的代碼下面再添加

 

1 routes.MapRoute(
2                "Default",                                             
3                "{controller}/{action}",                          
4                new { controller = "Home", action = "Index" }  
5            );

 

 如果將{controller}/{action}改為Home/{action}也行,但是這樣只能匹配Home controller,在當前例子中和上面的代碼功能上沒有區別,如果添加了其他controller以後就不能匹配新加的controller了。並且上面兩段添加Route規則的代碼順序不能顛倒,因為在匹配URL時會有順序,一旦匹配成功就不會再往下匹配。如果把下面那段放上面,在地址欄輸入http://localhost/login會匹配成controller=login,action=index,這不是我們想要的。

進行上述修改後從url上看似乎就是account檔案夾在根目錄下,Home等檔案夾在account檔案夾下。

本文適用於 ASP.NET MVC 1.0

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.