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();
}
}
为了在我的 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();
}
}