ASP.NET WebApi POST响应URL或位置

时间:2015-02-19 20:05:46

标签: asp.net url asp.net-web-api asp.net-mvc-routing

我希望结果网址/位置为: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});

1 个答案:

答案 0 :(得分:0)

事实证明,属性路由 [Route("api/orders", Name = "CreateOrder")]是罪魁祸首。它就在那里,因为另一个动作(HttpGet)“偶然”。这会覆盖基于约定的路由,这会在响应位置中提供正确的URL。

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