ASP.NET WebApi POST 响应 URL 或位置

ASP.NET WebApi POST response URL or location

我希望结果 URL/Location 是:api/orders/15 但是下面的代码给了我 api/orders?id=15

我应该改变什么才能实现这一点?

[Route("api/orders", Name = "CreateOrder")]
public IHttpActionResult Post([FromBody] Order order)
{
   //...
   return CreatedAtRoute("DefaultApi", new { newOrder.Id }, newOrder);
}

这是在 App_Start 下定义的路由:

    config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new {id = RouteParameter.Optional});

原来是属性路由 [Route("api/orders", Name = "CreateOrder")] 是罪魁祸首。它在那里是因为另一个操作 (HttpGet) 有它 "by accident." 这会覆盖基于约定的路由,后者会在响应位置给出正确的 URL。

在我删除两个动作的属性路由后,响应位置是基于约定路由的正确格式。这解决了这个问题。但是,很高兴知道在需要基于属性的路由的情况下,语法应该是什么。