我有一个执行CRUD的通用Web API控制器,如下所示:
public class BaseController : ApiController {
[HttpPost]
public virtual IHttpActionResult Post(T entity)
{
return Ok();
}
[HttpPut]
public virtual IHttpActionResult Put(T entity)
{
return Ok();
}
}
ObjectController派生自BaseController,但它覆盖Put方法
public class ObjectController : BaseController {
[HttpPut]
[Route("api/Object")]
public override IHttpActionResult Put(T entity)
{
return Ok();
}
}
当没有方法被覆盖时,我在调用控制器中的所有方法都没有问题。例如,
public class Object2Controller : BaseController { }
调用POST方法将返回405方法。 我的代码有什么问题?
编辑这不是一个重复的问题,因为我可以在其他控制器中调用PUT。
编辑2 将新内容更改为覆盖(虚拟),但仍然收到相同的错误
编辑3 提供了有效的控制器
答案 0 :(得分:1)
为什么在基类中不使用VIRTUAL关键字? .. VIRTUAL是专门为允许开发人员在派生类中使用ovverride方法而设计的
类似:
public class BaseController : ApiController {
[HttpPost]
public virtual IHttpActionResult Post(T entity)
{
return Ok();
}
[HttpPut]
public virtual IHttpActionResult Put(T entity)
{
return Ok();
}
}
然后:
public class ObjectController : BaseController {
[HttpPut]
[Route("api/Object")]
public override IHttpActionResult Put(T entity)
{
return Ok();
}
}
希望对您有帮助!