为什么这个MVC路由不正确?

时间:2016-12-14 11:27:21

标签: asp.net-mvc asp.net-web-api asp.net-core-mvc

在我的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和另一个问题中的野性梳理路由。这个问题更多的是关于哪种具体排序是正确的以及为什么。

1 个答案:

答案 0 :(得分:1)

您添加到路由表的路由的顺序很重要。如果您颠倒了订单,那么将始终调用默认路线而不是自定义路线。

参考: https://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/creating-custom-routes-cs