Чтобы сохранить обзор в моем веб-API, я использую базовый контроллер, который содержит некоторые основные действия, которые использует большинство других моих контроллеров.(Например, Post([FromBody]JObject newFields)
для добавления нового элемента.)
В моем проекте включена функция маршрутизации атрибутов.Итак, мой базовый контроллер выглядит примерно так:
public class BaseController<T> : ApiController where T : ObjectBase, new()
{
[Route("")]
[ResponseType(typeof(ObjectBase))]
public virtual IHttpActionResult Post([FromBody]JObject newFields)
{
// Post logic
return Ok();
}
}
Я наследую этот базовый контроллер в большинстве других контроллеров в моем проекте.
Теперь для моей проблемы:
В одном из моих контроллеров я хочу переопределить этот метод, потому что некоторая логика создания отличается.
Это пример того, как я пытаюсь выполнить эту функциональность:
[RoutePrefix("api/Users")]
public class UsersController : BaseController<UserObject>
{
[Route("")]
[ResponseType(typeof(ObjectBase))]
public override IHttpActionResult Post([FromBody]JObject newFields)
{
// Overridden post logic
return Ok();
}
}
Однако, когда я теперь отправляю запрос POST
на https://url/api/Users
, я получаю следующее сообщение об ошибке:
Сообщение:
Произошла ошибка.
ExceptionMessage:
Обнаружено несколько действий, соответствующих запросу:
Опубликовать тип WebAPI.Controllers.UsersController
Запись по типу WebAPI.Controllers.UsersController
ExceptionType:
System.InvalidOperationException
StackTrace:
на System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction (HttpControllerContext controllerContext)
в System.Web.Http.ApiController.ExecuteAsync (HttpControllerContext controllerContext, CancellationToken *..MoveNext ()
Кто-нибудь, кто может помочь мне решить эту проблему?
Заранее спасибо!