簡體   English   中英

MVC4的mapRoute URL - {controller} / {action} vs Controller / {action}。有什么不同?

[英]MVC4's mapRoute URL — {controller}/{action} vs Controller/{action}. What's the difference?

我最近因為這兩條MVC4路線顯然功能不同而受到灼傷。 我想知道是否有人能突出顯示正在發生的事情,所以我可以更好地理解。

routes.MapRoute(
    "post-User",
    "User",
    new { controller = "User", action = "create" },
    new { httpMethod = new HttpMethodConstraint("POST") }
    );

routes.MapRoute(
    "post-User",
    "{controller}",
    new { controller = "User", action = "create" },
    new { httpMethod = new HttpMethodConstraint("POST") }
    );

我認為{controller}位是占位符,並且在下一行中說控制器=“用戶”將使這兩個語句等效。 顯然使用{controller}設置所有路由的默認值?

您認為{controller}子字符串充當控制器名稱的占位符是正確的。 controller, but default to the User controller where no controller is specified: 考慮到這一點,然后,以下路由將匹配控制器,但默認為沒有指定控制器的User控制器:

routes.MapRoute(
    "post-User",
    "{controller}",
    new { controller = "User", action = "create" },
    new { httpMethod = new HttpMethodConstraint("POST") }
);

但是,以下內容將匹配路由User和 - 因為無法指定控制器 - 將始終路由到User控制器:

routes.MapRoute(
    "post-User",
    "User",
    new { controller = "User", action = "create" },
    new { httpMethod = new HttpMethodConstraint("POST") }
);

在這種情況下,差異是沒有意義的,因為您所做的只是強制路由User映射到控制器User ,這正是您的第一個路徑中發生的事情。

但是,請考慮以下事項:

routes.MapRoute(
    "post-User",
    "User/{action}",
    new { controller = "User", action = "MyDefaultAction" },
    new { httpMethod = new HttpMethodConstraint("POST") }
);

routes.MapRoute(
    "foo",
    "{controller}/{action}",
    new { controller = "User", action = "Index" },
    new { httpMethod = new HttpMethodConstraint("POST") }
);

現在,您的頂部路由將匹配對User控制器的請求,並指定了可選操作,並且默認為MyDefaultAction 對任何其他控制器的請求與第一個路由匹配 - 因為路由不以常量字符串User開頭 - 並且將默認返回到第二個路由(foo)。 同樣,行動是可選的; 但是,現在,與對User控制器的請求不同,其他控制器的默認操作將是“ Index操作。

所以現在......

.../User默認為MyDefaultAction操作。

.../SomeOtherController默認為Index操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM