1

OData API リソースを公開する Web API サービスがあります。ロジックの流れは単純です。Get()メソッドはリポジトリを呼び出してすべて (人) を取得し、クエリ文字列に対する OData コマンドの結果としてのフィルタリングは、OData 構成により API コントローラーで自動的に行われます。

ただし、People結果セットが大きくなってきているので、キャッシュを実装しました (ほとんどが静的で、毎日更新されるだけなので)。うまく機能します。ただし、ある時点で、データセット全体をプルバックしてからフィルタリング行うのではなく、OData 要求の一部としてのフィルタリングをリポジトリ クエリに配置する必要があるかもしれません。

最近のコード キャンプで、API 呼び出しで使用される OData コマンドにアクセスでき、これらを手動で解釈してクエリに手動で適用する必要があることが言及されたと思いました。

結果を積極的にフィルター処理できるように、コントローラーの API 呼び出しに存在する OData コマンドを確認する方法はありますか?

4

2 に答える 2

2

「クエリ オプションを直接呼び出す」の下のhttp://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-optionsを参照してください。Queryable 属性を使用する代わりに、実行中のクエリに関する情報を提供するオプションにアクセスできる代替署名を使用できます。

于 2013-05-17T21:25:29.153 に答える
0

実際にさらに調べてみると、クエリ オプションを抽出して検査するはるかに簡単な方法があることがわかりました。ODataQueryOptions呼び出しでパラメーターを使用しようとするGETと、次のエラーが発生しました。

Multiple actions were found that match the request

ASP.NET WebAPI OData - Inheriting from EntitySetController<>によると、[Queryable]Get() ではなく Get(ODataQueryOptions options) を使用EntitySetControllerすると、Get メソッドが既に定義されているためです。ただし、以下に示すように直接アクセスできることを知らなかっEntitySetControllerたパラメーターを定義し、OData コマンドパラメーターを検査する最も簡単な方法を示します。QueryOptions

public override IQueryable<Pharmacy> Get()
{
    //Inspect the query options passed in on the query string
    var opts = this.QueryOptions 

}
于 2013-05-23T15:52:06.567 に答える