Не получает параметры получения - PullRequest
0 голосов
/ 16 мая 2018

Я использую 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 голосов
/ 16 мая 2018

Убедитесь, что вы включили маршрутизацию атрибутов в коллекции маршрутов.

//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) {
        //...
    }
}

Тильда (~) в атрибуте метода используется для переопределения любых префиксов маршрута, если это необходимо.

Маршруты сопоставляются в таблице маршрутов в том же порядке, в котором они были добавлены. В вашем примере у вас были маршруты, основанные на соглашениях, зарегистрированные до атрибутов route После сопоставления маршрута он больше не ищет другие совпадения.

Ссылка Маршрутизация атрибутов в ASP.NET MVC 5

...