我有 mvc 应用程序,其中包含名为 account
的附加区域
我正在使用MvcSiteMapProvider
制作面包屑
我有一个操作,返回有关特定发票的详细信息。此操作的 url 类似于 localhost/account/profile/invs-histr/details/ID
,其中 ID 是要显示的发票的 ID。
我有注册区域路线的accountAreaRegistration.cs
,我有注册全球路线的RouteConfig.cs
。
目前,我必须在两个文件中注册localhost/account/profile/invs-histr/details/ID
路由。如果我没有在accountAreaRegistration.cs
注册这条路线,我有404 exception
。如果我没有在RouteConfig.cs
中注册此路线,则不会渲染痕迹导航。
RouteConfig.cs
文件的开头:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
}
accountAreaRegistration.cs
:
public override void RegisterArea(AreaRegistrationContext context)
{
context.Routes.MapMvcAttributeRoutes();
}
谁能解释一下,routes.MapMvcAttributeRoutes()
和context.Routes.MapMvcAttributeRoutes()
有什么区别?
为什么我应该在两个文件中注册路由?
提前谢谢你
这是一个扩展方法,因此从中调用它的对象是第一个参数。此参数是一个RouteCollection
,并且此集合在两种情况下都不同:
- 在第一次调用中,注册了具有路由属性的应用程序"根"控制器的路由
- 在第二个调用中,对当前区域内的控制器执行相同的 操作
如果要避免对每个区域进行第二次调用,可以使用 [RouteArea("AreaName")]
属性装饰控制器。
如果要更好地了解属性路由,请参阅此文档:ASP.NET MVC 5 中的属性路由 请特别注意"区域"部分。