2012-11-06 86 views
0

我有兩個類之間的多對多關係:供應商和產品。從ASP.Net Web API獲取相關記錄的正確方法?

在我的Web API中,我爲每個類都有一個控制器。兩個控制器都有明顯的動作,獲取對象列表並通過Id獲取單個對象。

我需要的是一個動作,獲取每個對象的許多對象。例如,如果我提供VendorId,那麼我需要供應商提供的所有產品。同樣,如果我提供ProductId,那麼我希望所有提供產品的供應商。

我有三個問題:

1)我認爲產品的控制器應具備,需要一個廠商ID,並返回產品(,反之亦然對於賣方控制器)的作用。這是「正確的」方法嗎?

2)我如何實現上述?我不能只添加另一個獲取操作,它需要一個Id,因爲控制器已經有了該方法簽名的操作(單個項目方法)。

例如:

http://localhost:53962/api/product/1   // grabs product with Id = 1. 
http://localhost:53962/api/product/vendor/1 // causes 404 

3)應在網址是什麼樣子時,我希望所有的產品適用於特定供應商?

回答

1

1)我認爲產品控制器應該採取採取VendorId並返回產品的動作(反之亦然,供應商控制器)。這是「正確的」方法嗎?

是的,這將工作。例如,你可以在你的ProductController的2個這樣的動作:

public Product Get(int id) {...} 
    public Product GetProductWithVendorId(int vendorId) {...} 

2)如何實現以上?我不能只添加另一個獲取操作,它需要一個Id,因爲控制器已經有了該方法簽名的操作(單個項目方法)。

如果要使用路由參數調用上述2個操作,則這是正確的。有不同的方法來解決這個問題。一種方法是修改你的路線。另一種方法是在URL中傳遞操作參數。

3)當我需要特定供應商的所有產品時,Url應該是什麼樣子?

這裏是通過參數在URL的一個例子。此URL將調用ProductController的的 '獲取' 行動:

http://../api/product/123 

此URL將調用ProductController的的 'GetProductWithVendorId' 行動:

http://../api/product?vendorid=456 
相關問題