用不同的动词创建Web Api控制器

时间:2014-11-28 20:12:32

标签: c# asp.net asp.net-mvc asp.net-web-api

我有接收请求的WebApi控制器获取所有条目:

public IEnumerable <client> GetAllClients ();

我需要这个相同的控制器方法:

public IEnumerable <clients> GetMaxPaymentClient ();

此方法也可根据要求获取Get,如何描述此方法以及如何调用客户端页面?

1 个答案:

答案 0 :(得分:0)

如果您只使用默认的Web API路由,那么在同一个控制器中,如果两个方法在同一个控制器中的名称起始处有相同的方法签名和相同的HTTP谓词,它就不会工作。这是基于方法名称的惯例操作的,并且无法通过向控制器发出GET请求来告知您打算使用哪种方法。

区分这两种方法的方法可能是:

  1. 将[route]属性添加到您的一个或两个方法中以区分它们。有关详细信息,请访问http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2。例如。你可以在你的第二种方法中添加[路线(&#34; clients / maxpayment&#34;)]。
  2. 将其中一个方法移动到另一个控制器。如果您正在编写REST样式API,这就是我推荐的内容。最大支付听起来应该是与客户的一般细节不同的资源
  3. 修改方法的方法签名,使它们不同,例如通过向其中一个方法添加ID参数。 Web API将能够处理Get()和Get(string id)等方法的单独路由。据推测,这不是一个选项,因为我假设您已经拥有所需的方法签名。