为什么此ASP.NET MVC配置需要虚假路由?

时间:2018-08-20 15:57:05

标签: asp.net-mvc-5 url-routing

到目前为止,我已经设置了ASP.NET MVC 5应用程序来执行标准controller/action/{id?}路由。今天,我决定要有一个自定义URL,因此我将配置扩展到了

public static void RegisterRoutes( RouteCollection routes )
    {
      routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
      routes.MapMvcAttributeRoutes(); // <== ADDED THIS LINE
      routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
    }

并将动作添加到我的ScheduleController

[Route( "Schedule/{year:int?}/{month:int?}" )]
public ActionResult Index( int? year, int? month )
{
  // ...
}

到目前为止,太好了。除非我开始将显式参数放入URL中并称为/Schedule/2018/10。突然,该行的视图布局出现异常

@Html.Action( "MainMenu", "Menu", new { area = string.Empty } )

(执行MenuController.MainMenu并呈现部分视图),说明

  

路由表中没有路由与提供的值匹配

(记录:我正在使用区域,但是MenuControllerScheduleController都在主要区域中)。

这只发生在此页面上(使用默认路由模板的所有其他页面继续工作),以及当我显式传递yearmonth时发生的情况。

我通过添加

解决了该问题
routes.MapRoute( "Bogus-Route-Required-For-Some-Reason", "Controller/Action", new { } );

就在默认路由之前,但我不明白(a)问题是什么,(b)伪路由为什么会解决它。

0 个答案:

没有答案