无法使用属性路由

时间:2016-07-25 21:10:53

标签: c# asp.net-web-api2 attributerouting

我有一个Web API项目,它使用" api / {controller} / {id}"的默认路由。在哪里" id"是可选的。在大多数情况下,这已足够,但在某些情况下我需要属性路由。在这种特定情况下,我有" api / Customers / {customerID} / Orders / {orderID}"需要客户ID且orderID是可选的。最初我的代码只需要订单ID,但我需要一种方法来拉取特定客户的订单,所以我在我的方法上使用了属性路由来允许这个。

我能够毫无问题地执行GET操作,但是当我尝试执行POST操作时,我收到500错误。但是奇怪的是我的对象被创建,所以抛出的异常必须在创建数据库插入之后才会出现,但我无法确认这一点,因为我的调试器不起作用。我的API与我的UI处于一个单独的项目中,无论出于何种原因,我无法让我的调试器在API项目中工作,因此我设置的断点不起作用。

我的POST方法中的最后一行代码是:

return CreatedAtRoute("DefaultApi", new { id = order.ID }, order);

此方法的第一个参数是路由名称,上面列出的参数是WebApiConfig.cs中指定的默认路由。但是,此特定路线与默认路线不同:

[Route("api/Customers/{customerID:int}/Orders")]

这可能是问题吗?由于所讨论的路由使用两个参数,我认为我需要在CreatedAtRoute方法的routeValues(second)参数中指定它们。

我需要做些什么来完成这项工作?我怀疑我在执行PUT和DELETE操作时可能会遇到问题,但我需要在修改或删除它之前创建一个对象。

1 个答案:

答案 0 :(得分:0)

好的,我自己解决了这个问题。我需要在路由上设置Name属性,并将其用作CreatedAtRouteMethod的第一个参数。我只需要指定与两个方法参数对应的两个路由值。我也能毫无问题地执行PUT和DELETE操作。

[Route("api/Customers/{customerID:int}/Orders", Name = "Test")]

return CreatedAtRoute("Test", new { customerID = customer.customerID, orderID = order.ID }, order);
相关问题