Web API返回405.它不应该是404吗?

时间:2015-06-09 12:43:30

标签: rest asp.net-web-api asp.net-web-api2 asp.net-web-api-routing

我有一个VendorsController支持GET(通过id)和POST(带有模型)。当通过预定路线呼叫时,它们按预期工作。但是,我注意到如果我在POST路由中添加一个id(即将“/ 5”添加到“api / vendors”),我得到一个405,

响应机构=

{   “消息”:“请求的资源不支持http方法'POST'。” }

这不应该是404 Not Found? VendorsController支持POST,但不支持该URL。

假设404是正确的,如何更新我的路由以返回404而不是405?我相信我可以实现一个自定义的ActionSelector来执行此操作,但这感觉有点矫枉过正。< / p>

[RoutePrefix("api/Vendors")]
public class VendorsController : ApiController
{
    [Route("")]
    public IHttpActionResult PostVendor([FromBody]Vendor vendor)
    {
        var uri = Url.Link("GetVendorById", 1);
        return Created(uri, vendor);
    }

    //GET by Id
    [Route("{id:int:min(1)}", Name="GetVendorById")]
    public IHttpActionResult GetVendor(int id)
    {
        return Ok(new Vendor() { Id = id });
    }
}

返回201:POST http://localhost/api/vendors

的网址

返回405的网址:POST http://localhost/api/vendors/5 在有和没有请求主体的情况下返回405。

1 个答案:

答案 0 :(得分:2)

我认为405是正确的,因为你有一个可以处理该URL的资源 - 你的GET。

如果您没有该资源的GET,那么404就是正确的。

并不是说VendorController不支持POST,而是您尝试访问的特定资源不支持POST。