2012-05-09 10 views
1

複雑な検索タイプのWeb APIを構築しようとしています。私は結果にページングをサポートしたい。検索の「状態」は複雑なので、クエリ文字列に永続化するのにはあまり適していません。しかし、私は、ページングオプションがクエリ文字列に含まれるようにしたいと思います。クエリ文字列パラメータでのリクエストの投稿

以下の2つの方法を実装しました。ウェブ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 
} 

/api/AdvancedSearchSearchRequestを掲示するには、方法1を順番に検索を行う方法2を呼び出し、結果をアップパッケージ化され、呼ばれています。うまくいけば分かるように、この結果に含まれているページ数が多い場合は、次のページに投稿するURLです。生成されたURLベースは/api/AdvancedSearch?page=2&pageSize=20で、私が望んだのとまったく同じです。

私の呼び出しコードでは、次にこの2番目のURLにPOSTを実行します。方法2のみが呼び出されます(期待どおり)。しかし、pagepageSizeの両方がnullです。

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

以下
+0

'HttpResponseMessage 'が削除されているため、自分のデザインを変更する必要があります。 – Aliostad

+0

@Aliostad - その変更へのリンクはありますか?代わりになるものは何ですか? –

+0

http://aspnetwebstack.codeplex.com/から最新のものをダウンロードすると、最新のSystem.Net.Http.dllにはもうそれがないことがわかります。 – Aliostad

答えて

0

を必要とされていないあなたは[FromUri]を使用してパラメータを飾るする必要があります。

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


私がコメントで言ったように、HttpResponseMessage<T>は以来、ドロップされますHttpResponseMessageのContentプロパティはすべてのneedeを実行します。


私はチェックして、ポストでクエーストリングのパラメータを渡しました。問題ありません。

+0

ちょうどこれを試して、それは違いを生じさせるようではありません。 –

+0

@Damien_The_Unbeliever見てみましょう。 – Aliostad

+0

@Damien_The_Unbeliever私はチェックし、私はポストでクエーストリングのパラメータを渡しました。問題ありません。 – Aliostad

関連する問題