Skip to main content
 首页 » 编程设计

.net之网络API 2 : how searching

2024年02月27日20xiaohuochai

在 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 对象交互,而不是直接与模型对象交互)。

请您参考如下方法:

  1. 定义一个搜索选项类,其中包含您希望客户端搜索的所有属性。现在我们将其称为 CustomerSearchOptions:

    public class CustomerSearchOptions 
    { 
        public bool IsActive { get; set; } 
     
        public string AnotherProperty {get; set;} 
    } 
    
  2. 在 API Controller 上定义一个 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); 
        } 
    
  4. Web API 的客户端需要调用您的 API,并在查询字符串中而不是在消息正文中传递搜索选项。

/base_url/customers?isActive=true&anotherProperty=somevalue

仅此而已。

希望有帮助。