重写的Web API方法返回“不允许的方法”

时间:2018-07-19 07:56:04

标签: c# asp.net asp.net-mvc asp.net-web-api

我有一个执行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 提供了有效的控制器

1 个答案:

答案 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();
    }
}

希望对您有帮助!