路线之间有什么区别.MapMvcAttributeRoutes() 和上下文.Routes.MapMvcAttribut

本文关键字:上下文 Routes MapMvcAttribut MapMvcAttributeRoutes 之间 什么 区别 | 更新日期: 2023-09-27 18:34:18

我有 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()有什么区别?

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

提前谢谢你

路线之间有什么区别.MapMvcAttributeRoutes() 和上下文.Routes.MapMvcAttribut

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

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

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

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