Rest 返回405的Web API。不应该';不是404吗?

Rest 返回405的Web API。不应该';不是404吗?,rest,asp.net-web-api,asp.net-web-api2,asp.net-web-api-routing,Rest,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Routing,我有一个VendorsController,它支持GET(通过id)和POST(通过模型)。当通过预定路线调用时,它们正按预期工作。然而,我注意到,如果我向POST路由添加一个id(即将“/5”添加到“api/供应商”),我会得到一个405,带有 响应主体= { “消息”:“请求的资源不支持http方法‘POST’。” } 这不是一个404找不到吗?VendorsController确实支持POST,但不支持该URL 假设404是正确的,我如何更新路由以返回404而不是405?我相信我可以实现一

我有一个VendorsController,它支持GET(通过id)和POST(通过模型)。当通过预定路线调用时,它们正按预期工作。然而,我注意到,如果我向POST路由添加一个id(即将“/5”添加到“api/供应商”),我会得到一个405,带有

响应主体=

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

这不是一个404找不到吗?VendorsController确实支持POST,但不支持该URL

假设404是正确的,我如何更新路由以返回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 });
    }
}
返回201:POST的URL

返回405:POST的URL
返回一个405,包含和不包含请求主体。

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

如果您没有获得该资源,那么404将是正确的

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