使用ZendeskApi_v2库获取前10条搜索结果时遇到异常
ZendeskApi_v2 限制搜索工单结果数量的正确方法
问题描述
使用ZendeskApi_v2库与Zendesk API交互获取特定用户工单时,尝试在搜索查询中添加limit或per_page参数来限制返回前10条结果,未达预期:要么返回少量过时记录,要么无结果;移除这些参数后可获取完整结果列表,但无法限制数量。
现有简化代码:
private void SearchTickets(string submitter, int limit = 10) { string searchTerm = $"submitter:{submitter} order_by:created sort:desc"; // 尝试的错误方式:把limit放到搜索字符串里 string limitedSearchTerm = $"{searchTerm} limit:{limit}"; var results = _api.Search.SearchFor<Ticket>(limitedSearchTerm); Console.WriteLine(results.Count); }
问题原因
Zendesk Search API的limit/per_page是请求级别的查询参数,不属于搜索字符串的语法范畴。将这些参数写入搜索词中,会被API解析为搜索条件的一部分(比如尝试匹配包含"limit:10"的工单内容),自然无法得到正确的分页/限制效果。
解决方案
使用ZendeskApi_v2库中SearchFor方法的重载版本,通过SearchOptions对象或直接传递分页参数来设置结果数量,而非将参数嵌入搜索字符串。
修改后的代码示例
private void SearchTickets(string submitter, int limit = 10) { string searchTerm = $"submitter:{submitter} order_by:created sort:desc"; // 正确方式:通过SearchOptions设置每页数量和页码 var searchOptions = new SearchOptions { PerPage = limit, // 每页返回的结果数 Page = 1 // 获取第一页,即最新的前10条 }; var results = _api.Search.SearchFor<Ticket>(searchTerm, searchOptions); Console.WriteLine(results.Count); }
补充说明
- 若使用的ZendeskApi_v2版本支持直接传递
perPage参数,也可简化为:var results = _api.Search.SearchFor<Ticket>(searchTerm, perPage: limit); order_by:created sort:desc确保返回结果按创建时间倒序排列,结合PerPage=10和Page=1即可获取最新的10条工单。- 避免在搜索字符串中添加
limit:或per_page:这类语法,此类参数仅作为请求参数传递才会生效。
内容的提问来源于stack exchange,提问作者ilCosmico
相关产品推荐
相关产品推荐

