Web API 2:如何搜索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web API 2:如何搜索相关的知识,希望对你有一定的参考价值。

在ASP Web API 2中,我想在我的REST URI中实现搜索功能。

例如,如果我有资源客户

/base_url/customers
/base_url/customers/1
....

我想举例来说:

/base_url/customers?active=true

如何在Web API 2控制器中实现搜索? (我不想使用OData协议,因为我有DTO对象:我的控制器必须与DTO对象接口,而不是直接与模型对象接口)。

答案
  1. 使用您希望客户端搜索的所有属性定义搜索选项类。现在让我们称之为CustomerSearchOptions: public class CustomerSearchOptions { public bool IsActive { get; set; } public string AnotherProperty {get; set;} }
  2. 在api控制器上定义一个Get方法,该方法获取CustomerSearchOptions类型的参数,并使参数由[FromUri]属性修饰。
  3. get方法的实现将使用搜索选项搜索您的存储库并返回匹配的数据(MyCustomerDto): [HttpGet] [ResponseType(typeof(List<MyCustomerDto>))] public async Task<IHttpActionResult> SearchAsync([FromUri] CustomerSearchOptions searchOptions) { if (searchOptions == null) { return BadRequest("Invalid search options"); } var searchResult = await myRepo.SearchAsync(searchOptions); return Ok(searchResult); } 您的web api的客户端需要通过查询字符串中的搜索选项调用您的api,而不是在邮件正文中。 / BASE_URL /客户?isActive =真anotherProperty = someValue中

就这样。

希望有所帮助。

另一答案

你应该遵循在可能的情况下将查询放在url中的做法,但是你还必须记住,api旨在让开发人员的生活更轻松。如果您的搜索条件很复杂,则可能无效。

我们有一个客户服务团队,他们希望在每个房产的范围和条件下公开实体的清洗版本,并且他们希望能够访问一些相关的房产。虽然我们本可以在URL中完成这项工作,但它会让我们的前端团队疯狂!因此,我们采用了POST到... / api / entity / queries的约定将用于这些复杂的搜索。

起初我反对使用像这样的POST,但它确实使整个过程变得更加简单。

另一答案

除非你非常需要控制传入的查询表达式,否则我强烈考虑使用ASP.net ODATA接口http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api,尤其是http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options#examples。这显示了端点如何返回IQueryable,然后消费者可以使用ODATA语法进行查询。

以上是关于Web API 2:如何搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SharePoint 框架 Web 部件中调用 SharePoint 搜索 API 以获取最近的新闻?

ASP.NET Web API 2使用Get方法从表多个参数中搜索数据

从 url 中提取音频片段并使用纯 Web Audio API 播放

如何使用 Spotify Web API 搜索具有通用标题的专辑?

web代码片段

前端开发工具vscode如何快速生成代码片段