2012-11-06 46 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 
相关问题