У меня есть два контроллера следующим образом:необычного поведения [RoutePrefix] в ASP.NET WebAPI
[RoutePrefix("v1/user/something")]
public class SomethingsController : ApiController
{
[Route("{id}")]
[HttpGet]
[ResponseType(typeof(SomethingsViewModel))]
public async Task<IHttpActionResult> GetAsync([FromUri]int id)
{
}
}
[RoutePrefix("v1/user")]
public class UserController : ApiController
{
[Route("{id}")]
[HttpGet]
[Authorize(Roles = "Super Admin")]
public async Task<IHttpActionResult> GetByIdAsync([FromUri]int id)
{
}
}
Теперь, глядя на приведенной выше коде, я думаю, что следующие два пути Создаются:
- v1/пользователь/что-то/{идентификатор}
- v1/пользователь/{идентификатор}
Но, к сожалению, по какой-то причине, что нет случай. При попытке доступа к одному из вышеуказанных маршрутов я получаю следующее сообщение об исключении:
Было найдено несколько типов контроллеров, соответствующих URL. Это может произойти, если маршруты атрибутов на нескольких контроллерах соответствуют запрошенному URL. Запрос нашел следующие типы соответствия контроллера: MyProject.Api.Controllers.UserController, MyProject.Api.Controllers.SomethingsController
Пожалуйста, помогите мне в выяснении, что я мог бы делать неправильно или какую маленькую деталь я отсутствует здесь.
В случае маршрутизации атрибутов веб-API пытается найти все контроллеры, которые соответствуют запросу. Если он видит, что несколько контроллеров способны справиться с этим, тогда он выдает исключение –
@Div. Я знаю, но проблема в том, что если вы посмотрите на вышеприведенный код, несколько контроллеров не должны обрабатывать его, так как там RoutePrefix разные. – haseebahmed7
@ haseebahmed7, хотя их префикс маршрута отличается от их разрешенных маршрутов.например, 'v1/user/{id}' с совпадением 'v1/user/something/{id}', где параметр id аргумента в первом маршруте примет 'something/{id}'. Префикс маршрута и атрибуты Route объединяются для создания полного маршрута, который добавляется в таблицу маршрутов. – Nkosi