ASP.NET MVC設置Route使URL中不顯示Controller


   最近剛開始用ASP.NET MVC,在新建ASP.NET MVC項目時自動生成的例子中,默認的Route是{controller}/{action}/{id},這里的id是參數,可以省略,但是MVC項目中必須得有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規則。

  實現

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

      routes.MapRoute(
        "test",
        "{action}",
        new { controller = "Account", action = "Login" }
       );

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

       routes.MapRoute(
        "Default",                      
        "{controller}/{action}",             
        new { controller = "Home", action = "Index" } 
      );

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

 

進行上述修改后從url上看似乎就是account文件夾在根目錄下,Home等文件夾在account文件夾下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM