Атрибут Inheriting Route портит уже существующие действия в Web API
Я пытаюсь унаследовать Route
атрибуты из базового контроллера точно в соответствии с этим. Хотя это, кажется, работает правильно, но это портит ранее рабочие действия.
Ниже приведен минимальный пример моей базы и дочерних контроллеров.
[RoutePrefix("api/{controller}")]
public class MyController<TEntity, TDto>: ApiController{
[HttpGet]
public IEnumerable<TDto> All(){
...
}
[HttpGet, Route("lookup")]
public virtual IEnumerable<TDto> LookupData(){
...
}
}
[RoutePrefix("api/entity")]
public class EntityController : MyController<Entity, DTO>
{
}
После реализации наследования атрибута маршрута, api/entity/lookup
действие работает, но в случае api/entity
(за All
), ActionSelector
возвращает 2 действия, оба All
, а также LookupData
таким образом вызывая ошибку.
Я не уверен, почему он выбирает действие с Route
атрибут даже в случае обычного маршрута. Что я должен делать по-другому? Или есть надежный способ написать ActionSelector
для этой проблемы?
1 ответ
Решение
Попробуйте добавить пустой [маршрут] к All
метод:
[HttpGet]
[Route]
public IEnumerable<TDto> All(){
...
}