2017-04-25 74 views
-1

得到了這個網址How do I use WebAPI/Rest correctly when other params are needed的Web API:需要了解網絡API屬性路由

我在網上API屬性的新路由

[Route("customers/{customerId}/orders")] 
public IEnumerable<Order> GetOrdersByCustomer(int customerId) { ... } 

or 

[Route("customers/{customerId}/orders/{orderId}")] 
public Order GetOrderByCustomer(int customerId, int orderId) { ... } 

的是第一和第二路線的意義的代碼?

第一個和第二個url如何顯示,請爲上面的操作添加相同的網址?

謝謝

+0

.../customers/AB0123/orders/17254 其中AB0123是customerId,17254是orderId – Nsevens

+0

可以在這裏找到完整的文檔(它似乎是代碼的來源):https://docs.microsoft .COM/EN-US/ASPNET/WEB-API /概述/ WEB-API的路由和行動/屬性的路由功能於Web的API-2。實質上,這些路由定義了應映射到這些控制器操作的URL,並且大括號中的參數將這些路徑段映射到同名控制器方法參數。 –

+0

@Nsevens你的答案是錯誤的,路由期望一個整數作爲customerId,你沒有通過一個。 –

回答

2

該路由是從應用程序基URL的偏移量。該路線可以包含由活頁夾翻譯的參數到您的方法參數。

所以第一路線,customers/{customerId}/orders將被稱爲https://someserver/customers/123/orders(路線= customers/123/orders),這將導致類似GetOrdersByCustomer(123)的呼叫。

第二條路線customers/{customerId}/orders/{orderId}將被稱爲https://someserver/customers/123/orders/456(路線= customers/123/orders/456),這將導致類似於GetOrderByCustomer(123, 456)的呼叫。

+0

我的問題爲什麼我應該在像https:// someserver/customers/123/orders這樣的第一路添加order關鍵字,而不是我們可以像https:// someserver/customers/123'這也是有意義的........所以告訴我爲什麼命令需要在那裏在URL? – Mou

+0

它並不是必須的,但如果添加它,則更容易理解。如果你接下來有這條路線怎麼辦? 'https:// someserver/customers/123/bills/456' –

+1

@Mou如果您不添加/訂單我可以解釋您想要檢索客戶實體,但是我添加/訂單我解釋您想要檢索來自客戶的訂單。 –