到目前为止,我已经设置了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
并呈现部分视图),说明
路由表中没有路由与提供的值匹配
(记录:我正在使用区域,但是MenuController
和ScheduleController
都在主要区域中)。
这只发生在此页面上(使用默认路由模板的所有其他页面继续工作),以及当我显式传递year
和month
时发生的情况。
我通过添加
解决了该问题routes.MapRoute( "Bogus-Route-Required-For-Some-Reason", "Controller/Action", new { } );
就在默认路由之前,但我不明白(a)问题是什么,(b)伪路由为什么会解决它。