2015-05-20 3 views
0

Я пытаюсь выполнить маршрутизацию с помощью Web API 2. Я определил префикс маршрута, и у меня есть два метода. Первый один работает, но второй один терпит неудачуАтрибутированная маршрутизация с несколькими параметрами в Web API 2

[RoutePrefix("api/VolumeCap")] 
public class VolumeCapController : ApiController 
{    
     [Route("{id:int}")] 
     public IEnumerable<CustomType> Get(int id) 
     { 
     } 

     [Route("{id:int}/{parameter1:alpha}")] 
      public CustomType Get(int id, string parameter1) 
     { 
     } 
    } 

http://localhost/MyWebAPI/api/VolumeCap/610023 // Это работает http://localhost/MyWebAPI/api/VolumeCap/610023?parameter1=SomeValue // Это не работает

Я получаю следующую ошибку

The запрошенный ресурс не поддерживает метод http «GET».

Кажется, что мне не хватает чего-то очевидного, но я не могу понять.

ответ

1

Если определить маршрут с

[RoutePrefix("api/VolumeCap")] 

и

[Route("{id:int}/{parameter1:alpha}")] 

ваш URL должен выглядеть следующим образом:

api/VolumeCap/[IdValue]/[Parameter1Value] 

и не нравится:

api/VolumeCap/[IdValue]?parameter1=[Parameter1Value] 

Ваш URL будет соответствовать методу с этим атрибутом [Route("{id:int}")], но с дополнительным параметром parameter1, т.е.

[Route("{id:int}")] 
public IEnumerable<CustomType> Get(int id, string parameter1) 

Это происходит потому, что первый шаг, чтобы выбрать действие, чтобы соответствовать маршрут по указанному URL-адресу, который Безразлично 't включает строку запроса, но только сегменты URL (разделенные /). После согласования маршрута дополнительные параметры считываются из строки запроса, но только после согласования маршрута.

+0

Спасибо JotaBe, это было полезно. – Noor

Смежные вопросы