Mat*_*hew 6 .net asp.net-mvc asp.net-mvc-routing visual-studio
在多台计算机上安装Visual Studio 2015后,AreaRegistration.RegisterAllAreas()拾取的路由映射中的路由顺序似乎已经自行调整.
我的应用程序中有3个区域,每个区域都有自己的AreaRegistration实现,并注册自己的特定路由.
在仅包含Visual Studio 2013的计算机上,路由列表(由RouteDebugger插件报告)是:
SomeArea/{controller}/{action}/{id}
DifferentArea/{controller}/{action}/{id}
{controller}/{action}/{id}
Run Code Online (Sandbox Code Playgroud)
在使用Visual Studio 2015的计算机上(和完全相同的源代码)
{controller}/{action}/{id}
SomeArea/{controller}/{action}/{id}
DifferentArea/{controller}/{action}/{id}
Run Code Online (Sandbox Code Playgroud)
这导致404错误,因为更一般的路线现在匹配以前没有的路线.为什么扫描区域的AreaRegistration类的顺序会随着新版Visual Studio的安装而改变?
我可能是错的,但我大胆猜测您在配置中颠倒了 和AreaRegistration.RegisterAllAreas()的顺序RouteConfig.RegisterRoutes(RouteTable.Routes),这与 Visual Studio 的版本无关。
如果你的配置是
AreaRegistration.RegisterAllAreas();
// Followed by
RouteConfig.RegisterRoutes(RouteTable.Routes);
Run Code Online (Sandbox Code Playgroud)
然后您的路线将按顺序匹配
SomeArea/{controller}/{action}/{id}
DifferentArea/{controller}/{action}/{id}
{controller}/{action}/{id}
Run Code Online (Sandbox Code Playgroud)
如果你的配置是
RouteConfig.RegisterRoutes(RouteTable.Routes);
// Followed by
AreaRegistration.RegisterAllAreas();
Run Code Online (Sandbox Code Playgroud)
然后您的路线将按顺序匹配
{controller}/{action}/{id}
SomeArea/{controller}/{action}/{id}
DifferentArea/{controller}/{action}/{id}
Run Code Online (Sandbox Code Playgroud)
整个.NET 路由框架都是顺序敏感的,无论路由是配置为区域、路由属性、自定义或Route子类、WebApi 路由,还是通过或RouteBase配置。因此,为了获得正确的结果,以正确的顺序注册每个部分非常重要。MapRouteMapPageRoute
也有可能您的路线配置一开始就无效,但为了告诉您必须发布您的路线配置。