创建具有不同谓词的 WebAPI 控制器

本文关键字:WebAPI 控制器 谓词 创建 | 更新日期: 2023-09-27 18:32:21

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

public IEnumerable <client> GetAllClients ();

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

public IEnumerable <clients> GetMaxPaymentClient ();

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

创建具有不同谓词的 WebAPI 控制器

如果仅使用默认的 Web API 路由,则在同一控制器中,在名称开头使用两个具有相同方法签名和相同 HTTP 谓词的方法是行不通的。这是根据基于方法名称的约定运行的,它无法通过对控制器的 GET 请求来判断您打算访问哪个方法。

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

  1. 将 [route] 属性添加到一个或两个方法以区分它们。有关这方面的更多详细信息,请参见 http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2。例如,您可以将[路由("客户/最大付款")]添加到第二种方法中。
  2. 将其中一个方法移动到其他控制器。如果您正在编写 REST 样式的 API,这就是我推荐的。最大付款听起来应该是与客户的一般详细信息不同的资源
  3. 修改方法的方法签名,使它们不同,例如向其中一个方法添加 ID 参数。Web API 将能够处理 Get() 和 Get (字符串 id) 等方法的单独路由。大概这不是您的选择,因为我假设您已经有了所需的方法签名。