没有收到get参数

时间:2018-05-16 11:48:03

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

我正在使用 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 }
    );


}

1 个答案:

答案 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属性上的波浪号(〜)用于覆盖任何路由前缀。

路由表中的路由按照添加的顺序进行匹配。在您的示例中,您在属性路由之前注册了基于约定的路由。一旦路线匹配,它就不再寻找其他匹配。

参考Attribute Routing in ASP.NET MVC 5