1

我正在尝试为复杂类型的搜索构建 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 SearchRequestto/api/AdvancedSearch时,调用方法 1,然后调用方法 2,后者进行搜索并打包结果。正如您所希望看到的,包含在此结果中(如果有更多结果页面可用)是为下一页发布的 URL。基于此生成的 URL/api/AdvancedSearch?page=2&pageSize=20正是我所希望的。

然后,在我的调用代码中,我执行POST到第二个 URL。仅调用方法 2(如预期的那样)。但是,两者pagepageSize都是null

我究竟做错了什么?或者你还需要看什么才能回答这个问题?

4

1 回答 1

0

下面不需要

您需要使用以下方法装饰您的参数[FromUri]

public async Task<HttpResponseMessage<SearchResults>> Post(SearchRequest request, 
   [FromUri]string page, 
   [FromUri]string pageSize)


正如我在评论中所说,由于 Content 属性将执行所有需要的操作,HttpResponseMessage<T>因此被删除。HttpResponseMessage


我检查并在帖子中传递了查询字符串参数,没问题。

于 2012-05-09T10:16:12.717 回答