我希望结果网址/位置为: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});
答案 0 :(得分:0)
事实证明,属性路由
[Route("api/orders", Name = "CreateOrder")]
是罪魁祸首。它就在那里,因为另一个动作(HttpGet)“偶然”。这会覆盖基于约定的路由,这会在响应位置中提供正确的URL。
删除两个操作的属性路由后,响应位置是基于基于约定的路由的正确格式。这解决了这个问题。但是,如果需要基于属性的路由,那么很高兴知道语法应该是什么。