Asp.net mvc 奇怪的路线行为(或者这是正常的)?

Asp.net mvc 奇怪的路线行为(或者这是正常的)?,asp.net-mvc,routing,default-value,Asp.net Mvc,Routing,Default Value,在ASP.NET MVC应用程序中,除其他路由外,还有以下路由(在registerRoutes中): 如果省略了城市默认值(请注意,在下面的代码段中,默认值部分不包括城市) 然后我遇到了问题:错误表示找不到此资源 这正常吗 我可以接受这样一个事实:我可以使用第一个版本在运行时提供一个值,但我想知道第二个版本失败的原因 提前感谢我认为这与路线中城市之后的类别有关,您为后者提供了价值,但忽略了前者。希望有更多路线经验的人能够更好地解释这一点。作为测试,如果您在路线2中反转城市和类别,它是否有效?如果

在ASP.NET MVC应用程序中,除其他路由外,还有以下路由(在registerRoutes中):

如果省略了城市默认值(请注意,在下面的代码段中,默认值部分不包括城市)

然后我遇到了问题:错误表示找不到此资源

这正常吗

我可以接受这样一个事实:我可以使用第一个版本在运行时提供一个值,但我想知道第二个版本失败的原因


提前感谢

我认为这与路线中城市之后的类别有关,您为后者提供了价值,但忽略了前者。希望有更多路线经验的人能够更好地解释这一点。作为测试,如果您在路线2中反转城市和类别,它是否有效?如果是这样的话,我的假设是正确的,我想是因为您认为要传递的类别被解释为一个城市(因为它在第二个类别中没有默认值),据我所知,可选参数应该是方法签名中的最后一个参数,并且控制器中的操作不会产生任何异常。我猜你的行为有以下特征:
详细信息(字符串城市、字符串类别)
。。。尝试将其更改为
Details(string category,string city=“”)
,而不触碰任何路由elements@Tommy这不可能是正确的:在Session\u Begin event中,我显式地设置了city参数,因此路由应该是合格的。路由发生在会话开始之前-这仍然是可能的。
routes.MapRoute(
                "DealRouteForCategory", // Route name
                "{city}/{category}", // URL with parameters                    
                new {city="", category = "someCategory", controller = "Deal", action = "Details" }, // Parameter defaults   
                new { controller = "^Deal$" }                 
            );
   routes.MapRoute(
                    "DealRouteForCategory", // Route name
                    "{city}/{category}", // URL with parameters                    
                    new {category = "someCategory", controller = "Deal", action = "Details" }, // Parameter defaults   
                    new { controller = "^Deal$" }                 
                );