我有一个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。
答案 0 :(得分:2)
我认为405是正确的,因为你有一个可以处理该URL的资源 - 你的GET。
如果您没有该资源的GET,那么404就是正确的。
并不是说VendorController不支持POST,而是您尝试访问的特定资源不支持POST。