使用查询字符串参数发布请求

时间:2012-05-09 09:12:46

标签: c# post asp.net-web-api

我正在尝试为复杂类型的搜索构建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
}

在将SearchRequest发布到/api/AdvancedSearch时,会调用方法1,然后调用方法2进行搜索,然后打包结果。正如您所希望看到的那样,包含在此结果中(如果有更多结果页面可用)是要发布到下一页的URL。生成的URL基于此/api/AdvancedSearch?page=2&pageSize=20,正如我所希望的那样。

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

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

1 个答案:

答案 0 :(得分:0)

以下不需要

您需要使用[FromUri]

来装饰参数
public async Task<HttpResponseMessage<SearchResults>> Post(SearchRequest request, 
   [FromUri]string page, 
   [FromUri]string pageSize)


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


我检查过,我在帖子中传递了querystring params,没问题。