DataServices を公開するために Entity Framework に接続された OData エンドポイントがありますが、実行時にいくつかのメタデータに基づいて出力されるデータを形成し、URL よりもクエリをより制限したいと考えています。
例えば:
http://services.odata.org/OData/OData.svc/Category(1)/Products ?$top=2&$orderby=名前
これがヨーロッパにいるユーザーの場合、「ヨーロッパ」の地域を持つ製品を返すようにしたいのですが、次のようにクライアントから提供されたフィルターを URL に含める必要はありません。
http://services.odata.org/OData/OData.svc/Category(1)/Products $top=2&$orderby=name&$filter=Region eq 'Europe'
Query Interceptors はこのようなことに使用できることがわかりましたが、これは多数のエンティティに対するすべてのクエリに適用される概念であるため、すべてのエンティティに適用するよりも一般的な方法があることを望んでいました。すべてのエンティティでインターセプターを指定します。
また、ユーザー権限に基づいて特定のフィールドを非表示にすることも検討しています。たとえば、フィールドが機密としてマークされている場合、ユーザーが機密データの表示を許可されているかどうかに基づいて、クエリまたは結果からフィールドを動的に削除できます。上で説明した手法は、これらのシナリオの両方に対する解決策になると思います。
URL の変更はおそらく行き当たりばったりなので、EF が作成する式ツリーにアクセスして、実行直前に項目を追加または削除できますか?
関連する場合に備えて、DataService 基本クラスを使用してデータを公開しています。
パブリック クラス MyDataService : DataService
これは迅速かつ簡単ですが、私が望むものを達成するのが難しいかもしれません
どんな助けでも大歓迎です - それが私が達成しようとしていることの単なる特定の名前であっても、それは解決策の研究に役立ちます