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

时间:2014-12-15 12:00:53

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我有一个名为account

的附加区域的mvc应用程序

我正在使用MvcSiteMapProvider制作面包屑

我有一项操作可以返回有关特定发票的详细信息。此操作的网址类似于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()之间的区别是什么?

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

提前谢谢

1 个答案:

答案 0 :(得分:6)

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

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

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

如果您想更好地了解属性路由,请参阅此文档:Attribute Routing in ASP.NET MVC 5请特别注意“区域”部分。