2014-12-03 76 views
0

我是MVC的新手,在學習時我有疑問,即我們可以在MVC中有多個路由模式,就像下面的例子。asp.net MVC中的多個路由模式

url:「{controller}/{action}/{id}」--->標準方式;

url:「{action}/{controller}/{id}」--->這是否是有效的路由模式,如果是,路由引擎如何識別哪個段是actionname,哪個段是controllername,如果我的url是像這樣

http://abcd:12345/ControllerName/ActionName/Id 

回答

2

我們可以在MVC類似下面 例如多路由模式。

url:「{controller}/{action}/{id}」--->標準方式;

網址: 「{行動}/{}控制器/(編號)」 --->這是有效的路由模式

  • ,你在你的問題指定了路由模式是有效的。

您可以通過添加一些自定義路由到您的路由配置來輕鬆測試它。例如通過增加航線:

routes.MapRoute( name: "test", url: "{action}/{controller}/{id}");

,並在瀏覽器中,你會打以下行動打字http://localhost/TestAction/Home/8

public class HomeController : Controller 
    { 
     public ActionResult TestAction(int id) 
     { 
      return Json(id,JsonRequestBehavior.AllowGet); 
     } 
} 

如何路由引擎識別哪個段是actionname和 哪個段是控制器名稱?

  • 路由引擎通過{動作}和{控制器}路由參數或由您在寄存器路線提供缺省值確定操作和控制器段。

  • 它也容易測試:從您的路線,並改變URL來{notcontroller}/{action}/{id}刪除默認值,你會得到System.InvalidOperationException: The matched route does not include a 'controller' route value, which is required.

  • MVC將一個URL,這樣的路線聲明順序映射到適合路由模式的第一條路線非常重要 - 你應該首先聲明最受約束的路線,而默認路線應該是最後一個。

一般來說mvc路由非常靈活。例如,您可以創建不同的URL模式:

Routes.MapRoute(
        name: "test", 
        url: "{controller}-{action}/{id}"); 

將請求映射如http://localhost/Home-Index/5

MVC 5引入了Attribute routing它提供了更大的靈活性。

+0

感謝您的詳細解釋Alex – 2014-12-04 06:10:09