在 ASP Web API 2 中,我想在 REST URI 中实现搜索功能。
例如,如果我有资源客户
/base_url/customers
/base_url/customers/1
....
我想要例如实现:
/base_url/customers?active=true
如何在 Web API 2 Controller 中实现搜索? (我不想使用 OData 协议(protocol),因为我有 DTO 对象:我的 Controller 必须与 DTO 对象交互,而不是直接与模型对象交互)。
请您参考如下方法:
定义一个搜索选项类,其中包含您希望客户端搜索的所有属性。现在我们将其称为 CustomerSearchOptions:
public class CustomerSearchOptions { public bool IsActive { get; set; } public string AnotherProperty {get; set;} }
在 API Controller 上定义一个 Get 方法,用于获取 CustomerSearchOptions 类型的参数,并使用 [FromUri] 属性修饰该参数。
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/customers?isActive=true&anotherProperty=somevalue
仅此而已。
希望有帮助。