Rest 返回405的Web API。不应该';不是404吗?
我有一个VendorsController,它支持GET(通过id)和POST(通过模型)。当通过预定路线调用时,它们正按预期工作。然而,我注意到,如果我向POST路由添加一个id(即将“/5”添加到“api/供应商”),我会得到一个405,带有 响应主体= { “消息”:“请求的资源不支持http方法‘POST’。” } 这不是一个404找不到吗?VendorsController确实支持POST,但不支持该URL 假设404是正确的,我如何更新路由以返回404而不是405?我相信我可以实现一个自定义ActionSelector来实现这一点,但这感觉有些过分了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?我相信我可以实现一
[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