ASP.NET Web API 2 覆盖继承属性路由操作找到多个操作

ASP.NET Web API 2 override inherited attribute route action multiple actions found

为了在我的 Web 中保持概览 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();
    }
}

但是,当我现在向 https://url/api/Users 发送 POST 请求时,我收到以下错误响应:

Message:

An error has occurred.

异常消息:

Multiple actions were found that match the request:

Post on type WebAPI.Controllers.UsersController

Post on type WebAPI.Controllers.UsersController

异常类型:

System.InvalidOperationException

堆栈跟踪:

at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)

at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)

at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()

谁能帮我解决这个问题?

提前致谢!

在尝试了很多东西之后,我终于找到了一个最简单的解决方案。 好像我只需要删除派生 class.

中的属性

因此,按照我在原始 post 中使用的示例,UsersController 现在看起来像这样:

[RoutePrefix("api/Users")]
public class UsersController : BaseController<UserObject>
{
    public override IHttpActionResult Post([FromBody]JObject newFields)
    {
        // Overridden post logic
        return Ok();
    }
}