【发布时间】:2016-07-26 05:46:34
【问题描述】:
我有一个使用默认路由“api/{controller}/{id}”的 Web API 项目,其中“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(第二个)参数中指定它们。
我需要做什么才能完成这项工作?我怀疑我在执行 PUT 和 DELETE 操作时也可能遇到问题,但我需要先创建一个对象才能修改或删除它。
【问题讨论】:
标签: c# asp.net-web-api2 attributerouting