从ASP.Net Web API获取相关记录的正确方法?

时间:2012-11-06 18:12:16

标签: asp.net-web-api

我在两个类之间有多对多的关系:供应商和产品。

在我的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)当我想要特定供应商的所有产品时,网址应该是什么样的?

1 个答案:

答案 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