Атрибут 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(){
    ...
}
Другие вопросы по тегам