1

別のサーバーでホストされている Web Api エンドポイントを利用する場合、Get 要求で見つかった一致の総数を確認しながら、過剰なシリアル化と逆シリアル化を回避するためにページ付けを行う最良の方法は何ですか?

ウェブ API:

[Queryable]
public IQueryable<Customer> Get(string input) {
    return _repo.GetCustomers(input).AsQueryable();
}

コントローラーコード:

HttpResponseMessage response = client.GetAsync("api/customer?input=test&$top=2&$skip=0").Result; // test string
if (response.IsSuccessStatusCode) {
    CustomerSearchResultViewModel resultViewModel = new CustomerSearchResultViewModel();
    resultViewModel.Customers = response.Content.ReadAsAsync<IEnumerable<Customer>>().Result.ToList();
    resultViewModel.TotalResults = resultViewModel.Customers.Count;
}

この例では、ページネーションの前に見つかった一致の総数を返すのではなく、TotalResults が 2 に制限されます。

OData を活用して合計結果を取得する方法はありますか? それが不可能な場合、必要な数を取得しながら OData 機能を維持するにはどうすればよいでしょうか?

4

1 に答える 1

1

OData の$inlinecountオプションを使用できます。リクエストは次のようになります api/customer?input=test&$top=2&$skip=0&$inlinecount=allpages

現在、既定の json および xml フォーマッタをそのまま使用して count の値を送信することはサポートされていません。あなたのクライアント コードは、デフォルトで送信しないことを決定した理由の最も良い例です。その理由は、クライアントが余分な count プロパティをどうするか分からないからです。当社の OData フォーマッターは、デフォルトで $inlinecount オプションをサポートしています。これは、OData フォーマットには、カウント値が応答のどこに収まるかについての明確なルールがあるためです。

とはいえ、応答でカウントをサポートするように簡単な変更を行うことができます。ただし、クライアント コードも変更する必要があります。詳細については、この回答を参照してください。

于 2013-03-28T16:19:52.870 に答える