0

Ну, я использую ASP.NET Web API 2 с маршрутизацией атрибутов. У меня есть два контроллера с небольшой разницей в их маршрутах:Конфликт веб-Api для двух разных контроллеров?

[RoutePrefix("api/menus")] 
public class MenusController : ApiController { 
} 

[RoutePrefix("api/menus/items")] 
public class MenuItemsController : ApiController { 
} 

У меня есть все методы Творожный в обоих контроллерах. Теперь все методы работают нормально, за исключением POST. Всякий раз, когда я пытаюсь вызвать POST метод MenuItemsController, я получаю следующее сообщение об ошибке:

Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL.

Интересно, что POST метод MenusController отлично работает нормально. Это только MenuItemsControllerPOST метод, вызывающий проблему. Я пробовал использовать Order свойство Route также, но напрасно.

Любая помощь очень ценится.

EDIT: маршруты Мои POST методы ниже:

  • POST api/menus/
  • POST api/menus/items
+0

Думаю, у меня такая же проблема. У меня есть GET v1/Jobs/'в одном контроллере и, например, 'GET v1/Jobs/Materials' и' PUT v1/Jobs/{jobID}/Materials/{matID} 'в' MaterialController', который отлично работает. Но когда я добавляю PUT или POST в 'JobController', все контроллеры, которые используют префикс' Jobs' в своем разрыве маршрутизации. –

ответ

1

Aneeq пытаются присоединиться оба контроллера:

[RoutePrefix("api/menus")] 
public class MenusController : ApiController 
{ 
    [Route("")] 
    public string Get() 
    { 
     return "menus"; 
    } 
} 

[RoutePrefix("api/menus")] 
public class MenuItemsController : ApiController 
{ 
    [Route("items")] 
    public string Get() 
    { 
     return "menus items"; 
    } 
} 

Я проверил и отлично работает. Это круто?

PS: Я использовал «Get», чтобы упростить решение.

+0

Да, это работает. Но дело в том, что мои контроллеры уже слишком длинны. Нет ли другого способа сделать эту работу, сохранив ее организованность? – Aneeq

+0

Да, я сделал это проверить –

+0

Я имею в виду любое другое решение, кроме объединения контроллеров? – Aneeq

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