我正在尝试为复杂类型的搜索构建 Web API。我想在结果中支持分页。搜索的“状态”很复杂,因此并不真正适合在查询字符串中持久化。但我希望将分页选项包含在查询字符串中。
我已经实现了两种方法,如下所示,web api 代码似乎理解我想要做什么,但查询字符串参数从未被分配。对此的任何提示或建议将不胜感激:
public Task<HttpResponseMessage<SearchResults>> Post(SearchRequest request) //Method 1
{
return Post(request, null, null);
}
public async Task<HttpResponseMessage<SearchResults>> Post(SearchRequest request, string page, string pageSize) //Method 2
{
//All of the complex code, including...
if (PageNo < TotalPages)
{
searchResults.AddLink(new Link { Uri = Url.Route("DefaultApi", new {
controller = "AdvancedSearch",
page = (PageNo + 1).ToString(),
pageSize = PageSize.ToString() }),
Relation = "nextPost" });
}
//Final wrap up, etc
}
在 POST a SearchRequest
to/api/AdvancedSearch
时,调用方法 1,然后调用方法 2,后者进行搜索并打包结果。正如您所希望看到的,包含在此结果中(如果有更多结果页面可用)是为下一页发布的 URL。基于此生成的 URL/api/AdvancedSearch?page=2&pageSize=20
正是我所希望的。
然后,在我的调用代码中,我执行POST
到第二个 URL。仅调用方法 2(如预期的那样)。但是,两者page
和pageSize
都是null
。
我究竟做错了什么?或者你还需要看什么才能回答这个问题?