1

複雑なタイプの検索用のWebAPIを構築しようとしています。結果のページングをサポートしたいと思います。検索の「状態」は複雑であるため、クエリ文字列での永続化にはあまり適していません。ただし、ページングオプションをクエリ文字列に含める必要があります。

以下のように2つのメソッドを実装しましたが、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すると、メソッド1が呼び出さSearchRequest/api/AdvancedSearch、メソッド2が呼び出されて検索が実行され、結果がパッケージ化されます。ご覧のとおり、この結果には(結果のページがさらにある場合)次のページに投稿するURLが含まれています。これに基づいて生成されたURLは/api/AdvancedSearch?page=2&pageSize=20、まさに私が望んでいたとおりです。

次に、呼び出しコードで、POSTこの2番目のURLに対してを実行します。方法2のみが呼び出されます(予想どおり)。しかし、両方pageともpageSizeですnull

私は何が間違っているのですか?または、この質問に答えるために他に何を見る必要がありますか?

4

1 に答える 1

0

下は不要

以下を使用してパラメーターを装飾する必要があります[FromUri]

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


コメントで述べたように、HttpResponseMessage<T>の Content プロパティがHttpResponseMessage必要なすべての操作を実行するため、 は削除されています。


確認したところ、投稿でクエリ文字列パラメーターを渡しましたが、問題ありません。

于 2012-05-09T10:16:12.717 に答える