0

В WebApiConfig я добавил к маршрутам:Настройка WebAPI маршрутизация

config.Routes.MapHttpRoute(
     name: "v1_Api", 
     routeTemplate: "api/v1/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
); 

config.Routes.MapHttpRoute(
     name: "v1_ApiAction", 
     routeTemplate: "api/v1/{controller}/{action}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
); 

В ApiController У меня 2 GET действия:

[HttpGet] 
public async Task<IEnumerable<RequestModel>> Pending(){} 

[HttpGet] 
public async Task<IEnumerable<RequestModel>> Resolved() 

Когда я попытался позвонить по одному из этой акции от AngularJS службы I получил 500 ошибок.

несколько действий были обнаружено, что соответствует запросу

Когда я оставил только второй путь, который соответствует моему Action - это хорошо работает.

"/api/v1/RequestRecipient/Pending" 

В чем может быть проблема в случае двух маршрутов?

+0

какой тип вы ожидаете для 'id'. Вам может потребоваться добавить ограничение, поскольку, поскольку он стоит, указанный вами путь будет соответствовать обем шаблонам, поскольку id является необязательным – Nkosi

ответ

0

После некоторого исследования я нашел решение - просто нужно изменить порядок маршрутов.

От:

config.Routes.MapHttpRoute(
     name: "v1_Api", 
     routeTemplate: "api/v1/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
); 

config.Routes.MapHttpRoute(
     name: "v1_ApiAction", 
     routeTemplate: "api/v1/{controller}/{action}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
); 

To:

config.Routes.MapHttpRoute(
     name: "v1_ApiAction", 
     routeTemplate: "api/v1/{controller}/{action}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
); 

config.Routes.MapHttpRoute(
     name: "v1_Api", 
     routeTemplate: "api/v1/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
); 

Но и я нашел кого-то мнение, что это не хорошая идея иметь действий и недеяние маршруты ,

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