複雑なタイプの検索用の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
。
私は何が間違っているのですか?または、この質問に答えるために他に何を見る必要がありますか?