在我的MVC应用程序的RouteConfig中,我正在使用它:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute (
name: "Dictionary", // Route name
url: "dictionary/{id}", // URL with parameters
defaults: new { controller = "Dictionary", action = "details" } // Defaults
);
此时此URL成功返回页面:
http://127.0.0.1:8080/dictionary/details/1
虽然失败了:
http://127.0.0.1:8080/dictionary/1
有例外
“HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,其名称已更改......”
当我交换路由时,像这样:
routes.MapRoute (
name: "Dictionary", // Route name
url: "dictionary/{id}", // URL with parameters
defaults: new { controller = "Dictionary", action = "details" } // Defaults
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这两个网址都开始返回页面。
为什么会这样?
提前致谢。
仅供参考这个问题与可能重复的问题不同,因为UrlParameter.Optional和另一个问题中的野性梳理路由。这个问题更多的是关于哪种具体排序是正确的以及为什么。
答案 0 :(得分:1)
您添加到路由表的路由的顺序很重要。如果您颠倒了订单,那么将始终调用默认路线而不是自定义路线。
参考: https://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/creating-custom-routes-cs