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

Web API Returning a 405. Shouldn't it be a 404?

我有一个支持 GET(通过 id)和 POST(通过模型)的 VendorsController。当通过预期路线调用时,它们按预期工作。但是,我注意到如果我向 POST 路由添加一个 id(即向 "api/vendors" 添加“/5”),我会得到一个 405,其中

响应正文 =

{ "Message": "The requested resource does not support http method 'POST'." }

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

假设 404 是正确的,如何将我的路由更新为 return 404 而不是 405? 我相信我可以实现自定义 ActionSelector 来完成这个,但这感觉有点矫枉过正。

[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 });
    }
}

URL return 一个 201: POST http://localhost/api/vendors

URL return 发送 405:POST http://localhost/api/vendors/5 Returns 带有和不带有请求正文的 405。

我认为 405 是正确的,因为您拥有可以处理该问题的资源 URL - 您的 GET。

如果您对该资源没有 GET,则 404 是正确的。

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