我在两个类之间有多对多的关系:供应商和产品。
在我的Web API中,每个类都有一个控制器。两个控制器都有明显的操作,获取对象列表并通过Id获取单个对象。
我需要的是一个动作,获取每个对象的许多对象。例如,如果我提供VendorId,那么我想要供应商提供的所有产品。同样,如果我提供ProductId,那么我想要所有供应产品的供应商。
我有三个问题:
1)我认为产品控制器应具有采用VendorId的操作并返回产品(对于供应商控制器,反之亦然)。这是“正确的”方法吗?
2)我如何实现上述目标?我不能只添加另一个获取ID的Get动作,因为控制器已经有一个带有该方法签名的动作(单项方法)。
例如:
http://localhost:53962/api/product/1 // grabs product with Id = 1.
http://localhost:53962/api/product/vendor/1 // causes 404
3)当我想要特定供应商的所有产品时,网址应该是什么样的?
答案 0 :(得分:1)
1)我认为产品控制器应具有采用VendorId的操作并返回产品(对于供应商控制器,反之亦然)。这是“正确的”方法吗?
是的,这会有效。例如,您可以在ProductController中执行2个此类操作:
public Product Get(int id) {...}
public Product GetProductWithVendorId(int vendorId) {...}
2)我如何实现上述目标?我不能只添加另一个获取Id的Get操作,因为控制器已经有一个带有该方法签名的操作(单项方法)。
如果您想使用route参数调用上述2个操作,那么这是正确的。有不同的方法来解决这个问题。一种方法是修改你的路线。另一种方法是在URL中传递action参数。
3)当我想要特定供应商的所有产品时,网址应该是什么样的?
以下是在URL中传递参数的示例。此URL将调用ProductController的“获取”操作:
http://../api/product/123
此URL将调用ProductController的'GetProductWithVendorId'操作:
http://../api/product?vendorid=456