MVC路由配置相同的url参数签名

时间:2017-01-22 04:22:06

标签: asp.net-mvc routes

我的路由配置问题(MVC 5)。我有多个具有相同参数签名的路由(相同数量的参数和参数类型)。

在下面的代码中,底部的2个配置设置是对接头。对服务器的正常回发应该在底部获得默认路径,而是由于相同的签名而获取中间的路径。

我无法找到一种方法,使中间的一个与底部的默认值相同。我仍然需要中间一个只有那两个字符串(action和gameHtmlAbbr)。

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: null,
            url: "{gameConsoleHtmlAbbr}",
            defaults: new { Controller = "Game", action = "GameList", gameConsoleHtmlAbbr = (string)null }
        );

        routes.MapRoute(
            name: null,
            url: "{action}/{gameHtmlAbbr}",
            defaults: new { Controller = "Game", action = "Snes", gameHtmlAbbr = (string)null }
        );

        routes.MapRoute(
            name: null,
            url: "{controller}/{action}",
            defaults: new { controller = "Game", action = "GameList" }
        );
    }
}

1 个答案:

答案 0 :(得分:1)

第2和第3路线都定义了一条包含2个路段的路线(但没有区分它们),并且由于路线按照定义的顺序进行匹配,任何有2个路段的路段都会匹配第2路段(第3路线将永远不会被执行)

您需要为每个方法定义一个特定路由,例如,点击Snes() GameController方法,在默认路由之前添加特定路由(并删除第二条路径

routes.MapRoute(
    name: "Snes",
    url: "Snes/{gameHtmlAbbr}",
    defaults: new { Controller = "Game", action = "Snes", gameHtmlAbbr = (string)null }
);