我正在使用 ASP.NET MVC 5
我遇到了路线和参数问题。
我的 ControllerBase
中有此功能[HttpGet]
[Route("~/obtenerAngulos/{Conex_AT}/{Conex_BT}")]
public JsonResult obtenerAngulos(string Conex_AT, string Conex_BT)
{
return Json(
new
{
AT = Conex_AT,
BT = Conex_BT
}
, JsonRequestBehavior.AllowGet);
}
我开始遇到第二个参数Conex_BT
时遇到问题Url.Action()
返回此路由http://localhost:53645/Base/obtenerAngulos?Conex_AT=Y&Conex_BT=y
问题,Conex_BT
始终为空
然后我尝试使用路由并为其添加数据转换[Route("~/obtenerAngulos/{Conex_AT}/{Conex_BT}")]
但是Url.Action()
我保持与以前相同的路线。
即使我尝试像http://localhost:53645/Base/obtenerAngulos/AA/BB
那样手动编写,我也会
HTTP错误404.0 - 未找到
我提到这两个问题因为我很确定它们是关系密切的。
这是路线配置
RouteConfig.cs
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
答案 0 :(得分:2)
确保您已在路由集上启用了属性路由。
//enable attribute routes
routes.MapMvcAttributeRoutes();
//convention-based routes
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
现在这意味着以下内容应与obtenerAngulos/y/x
public class ControllerBase: Controller {
//Matches obtenerAngulos/y/x
[HttpGet]
[Route("~/obtenerAngulos/{Conex_AT}/{Conex_BT}")]
public JsonResult obtenerAngulos(string Conex_AT, string Conex_BT) {
//...
}
}
如果需要,method属性上的波浪号(〜)用于覆盖任何路由前缀。
路由表中的路由按照添加的顺序进行匹配。在您的示例中,您在属性路由之前注册了基于约定的路由。一旦路线匹配,它就不再寻找其他匹配。