Параметры URL в MVC 4 Web API - PullRequest
7 голосов
/ 30 марта 2012

Допустим, у меня есть два метода в контроллере веб-API MVC 4:

public IQueryable<A> Get() {}

И

public A Get(int id) {}

И следующий маршрут:

routes.MapHttpRoute(
    name: "Default", 
    routeTemplate: "{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

Этоработает как положено.Добавление еще одного параметра, например:

public IQueryable<A> Get(int p) {}

public A Get(int id, int p) {}

, приводит к ситуации, когда MVC возвращает 404 для следующего запроса:

GET /controller?p=100

или

GET /controller/1?p=100

ссообщение «На контроллере« контроллер », который соответствует запросу» не найдено никаких действий »

Я ожидаю, что параметры URL должны быть подключены MVC без проблем, но это не так.Это ошибка или мое недопонимание того, как MVC отображает запрос на действие?

Ответы [ 2 ]

8 голосов
/ 30 марта 2012

Если вы думаете о том, что вы пытаетесь сделать, и о маршрутах, которые вы пробуете, вы поймете, что второй параметр "p" в вашем случае также должен быть отмечен как необязательный параметр.

то есть ваш маршрут должен быть определен так:

routes.MapHttpRoute(
name: "Default", 
routeTemplate: "{controller}/{id}/{p}",
defaults: new { id = RouteParameter.Optional, p = RouteParameter.Optional });

Как только вы это сделаете, URL

/ контроллер? Р = 100 сопоставится с вашим

public IQueryable<A> Get(int p) {}

метод и URL-адрес примерно так:

 /controller/1?p=100

отобразится на ваш

public A Get(int id, int p) {}

метод, как вы ожидаете.

Так что, чтобы ответить на ваши вопросы .... нет, это не ошибка, а как задумано / ожидается.

0 голосов
/ 23 апреля 2015

В WebApiConfig добавьте новые значения по умолчанию в httproute

RouteParameter. Опционально для дополнительных маршрутов у меня не работало

  config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}/{voucher}",
            defaults: new { id = RouteParameter.Optional ,defaultroute1="",defaultroute2=""}
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...