ASP.NET路由无法正确映射Action参数问题求助
解决路由参数绑定顺序错误的问题
你配置的路由和Action代码如下:
路由配置(RouteConfig.cs):
routes.MapRoute( name: "PreSeleccion", url: "{controller}/{action}/{month}/{id}", defaults: new { controller = "Menu", action = "PreSeleccion" } );
Menu控制器的Action方法:
// GET: Menu/PreSeleccion/{month}/{id} [HttpGet] [AllowAnonymous] public async Task<ActionResult> PreSeleccion(int month = 0, int id = 0) { }
调用URL /Menu/PreSeleccion/202301/80 时出现month=0、id=202301的错误,核心原因是路由匹配顺序导致请求被默认路由优先匹配:如果你的路由配置中,默认路由({controller}/{action}/{id})定义在PreSeleccion路由之前,请求会先命中默认路由——此时id被绑定为202301,URL中的80没有对应路由参数,month因未匹配到值使用默认值0。
解决方法:
调整路由顺序:将
PreSeleccion路由放在默认路由之前,让更具体的路由优先匹配:// 先定义PreSeleccion路由 routes.MapRoute( name: "PreSeleccion", url: "{controller}/{action}/{month}/{id}", defaults: new { controller = "Menu", action = "PreSeleccion" } ); // 再定义默认路由 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );添加路由参数约束(可选但推荐):给路由参数指定类型约束,确保只有符合类型的参数才会匹配该路由,避免被其他路由干扰:
routes.MapRoute( name: "PreSeleccion", url: "{controller}/{action}/{month:int}/{id:int}", defaults: new { controller = "Menu", action = "PreSeleccion" } );
调整完成后,请求/Menu/PreSeleccion/202301/80会正确匹配PreSeleccion路由,month绑定为202301,id绑定为80。
内容的提问来源于stack exchange,提问作者jstuardo
相关产品推荐
相关产品推荐

