Asp.net web api 从ASP.NETWebAPI获取相关记录的正确方法?

Asp.net web api 从ASP.NETWebAPI获取相关记录的正确方法?,asp.net-web-api,Asp.net Web Api,我有两个类之间的多对多关系:供应商和产品 在我的Web API中,每个类都有一个控制器。这两个控制器都有明显的操作,可以获取对象列表并按Id获取单个对象 我需要的是一个为每个对象获取多个对象的操作。例如,如果我提供一个VendorId,那么我需要供应商提供的所有产品。同样,如果我提供ProductId,那么我需要所有提供该产品的供应商 我有三个问题: 1) 我认为产品控制员应该有采取VendorId并返回产品的操作(对于VendorController,反之亦然)。这是“正确”的方法吗 2) 如

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

在我的Web API中,每个类都有一个控制器。这两个控制器都有明显的操作,可以获取对象列表并按Id获取单个对象

我需要的是一个为每个对象获取多个对象的操作。例如,如果我提供一个VendorId,那么我需要供应商提供的所有产品。同样,如果我提供ProductId,那么我需要所有提供该产品的供应商

我有三个问题:

1) 我认为产品控制员应该有采取VendorId并返回产品的操作(对于VendorController,反之亦然)。这是“正确”的方法吗

2) 如何实现上述功能?我不能仅仅添加另一个带有Id的Get操作,因为控制器已经有一个带有该方法签名的操作(单项方法)

例如:

http://localhost:53962/api/product/1         // grabs product with Id = 1.
http://localhost:53962/api/product/vendor/1  // causes 404
3) 当我想要某个特定供应商的所有产品时,Url应该是什么样子

1) 我认为产品控制员应该有采取VendorId并返回产品的操作(对于VendorController,反之亦然)。这是“正确”的方法吗

是的,这会有用的。例如,在ProductController中可以有两个这样的操作:

    public Product Get(int id) {...}
    public Product GetProductWithVendorId(int vendorId) {...}
2) 如何实现上述功能?我不能仅仅添加另一个带有Id的Get操作,因为控制器已经有一个带有该方法签名的操作(单项方法)

如果要使用route参数调用上述两个操作,则这是正确的。有不同的方法来实现这一点。一种方法是修改路线。另一种方法是在URL中传递action参数

3) 当我想要某个特定供应商的所有产品时,Url应该是什么样子

下面是在URL中传递参数的示例。此URL将调用ProductController的“获取”操作:

http://../api/product/123
此URL将调用ProductController的“GetProductWithVendorId”操作:

http://../api/product?vendorid=456