为了在我的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();
}
}
但是,当我现在向POST
发送https://url/api/Users
请求时,我收到以下错误回复:
消息:
发生了错误。
ExceptionMessage:
找到符合请求的多项操作:
在WebAPI.Controllers.UsersController类型上发布
在WebAPI.Controllers.UsersController类型上发布
ExceptionType:
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()
任何可以帮我解决这个问题的人都会这样做吗?
提前致谢!
答案 0 :(得分:1)
在尝试了很多东西之后,我终于找到了一个最简单的解决方案。 好像我只需要删除派生类中的属性。
因此,要按照我在原始帖子中使用的示例,UsersController
现在看起来像这样:
[RoutePrefix("api/Users")]
public class UsersController : BaseController<UserObject>
{
public override IHttpActionResult Post([FromBody]JObject newFields)
{
// Overridden post logic
return Ok();
}
}