routes.MapMvcAttributeRoutes()和context.Routes.MapMvcAttributeRoutes();之间的区别是什么?

Den*_*nis 3 c# asp.net-mvc asp.net-mvc-routing asp.net-mvc-4

我有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();
}
Run Code Online (Sandbox Code Playgroud)

而且accountAreaRegistration.cs:

public override void RegisterArea(AreaRegistrationContext context)
{
   context.Routes.MapMvcAttributeRoutes();
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释一下,routes.MapMvcAttributeRoutes()和之间的区别是context.Routes.MapMvcAttributeRoutes()什么?

为什么我应该在两个文件中注册路由?

先感谢您

Jot*_*aBe 6

这是一个扩展方法,因此您调用它的对象是第一个参数.此参数是a RouteCollection,此集合在以下两种情况下都不同:

  • 在第一次调用中,在应用程序的"根"中注册了具有路由属性的控制器的路由
  • 在第二次调用中,对当前区域内的控制器进行相同的操作

如果要避免对每个区域进行第二次调用,可以使用该[RouteArea("AreaName")]属性修饰控制器.

如果您想更好地理解属性路由,请参阅此文档:ASP.NET MVC中的属性路由5请特别注意"区域"部分.

  • 该链接现在已失效:/ (3认同)