2016-07-25 94 views
0

我有一個使用默認路由「api/{controller}/{id}」的Web API項目,其中「id」是可選的。在大多數情況下,這是足夠的,但在某些情況下,我需要屬性路由。在這種特殊情況下,我有「api/Customers/{customerID}/Orders/{orderID}」,其中客戶ID是必需的,orderID是可選的。最初我的代碼只需要訂單ID,但我需要一種方法來爲特定客戶提供訂單,所以我在我的方法上使用了一個屬性路由來允許這樣做。無法使用屬性路由發佈到Web API端點

我能夠毫無問題地執行GET操作,但是當我嘗試執行POST操作時,出現500錯誤。奇怪的是我的對象被創建,因此拋出的異常必須在創建數據庫插入後纔會出現,但由於我的調試器不起作用,我無法證實這一點。我的API與我的用戶界面是在一個單獨的項目中,無論出於何種原因,我無法讓我的調試器在API項目中工作,所以我設置的斷點不起作用。

在我的POST方法的代碼的最後一行是這樣的:

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

這種方法的第一個參數是路由名以上​​列出的是在WebApiConfig.cs指定的默認路由。但是,此特定路線與默認設置不同:

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

這是問題嗎?由於所討論的路由使用了兩個參數,我假設我需要在CreatedAtRoute方法的routeValues(second)參數中指定它們。

我需要做些什麼來完成這項工作?我懷疑我也可能在執行PUT和DELETE操作時遇到問題,但我需要先創建一個對象,然後才能修改或刪除它。

回答

0

好的,我自己解決了這個問題。我需要在路由上設置Name屬性並將其用作CreatedAtRouteMethod的第一個參數。我只需要指定兩個方法參數對應的兩個路由值。我也能夠毫無問題地執行PUT和DELETE操作。

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

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