WCF Data Services では、アプリケーションで要求メッセージを先に取得して、操作にカスタム ロジックを追加することができます。 このカスタム ロジックを使用して、受信メッセージのデータを検証できます。 このカスタム ロジックを使用して、クエリ要求の範囲をさらに制限することもできます (カスタム認証ポリシーを要求ごとに挿入するなど)。
先に取得するには、データ サービスで特別なメソッドを使用します。 これらのメソッドは、メッセージ処理の適切なポイントで WCF Data Services によって呼び出されます。 インターセプターはエンティティ セットごとに定義されます。インターセプター メソッドは、サービス操作が行うように要求からパラメーターを受け取ることはできません。 HTTP GET 要求を処理するときに呼び出されるクエリ インターセプター メソッドは、クエリ要求に対してインターセプターのエンティティ セットを返すかどうかを決定するラムダ式を返す必要があります。 この式は、要求された操作をさらに絞り込むためにデータ サービスによって使用されます。 次の例は、クエリ インターセプターの定義の例を示します。
' Define a query interceptor for the Orders entity set.
<QueryInterceptor("Orders")> _
Public Function OnQueryOrders() As Expression(Of Func(Of Order, Boolean))
// Define a query interceptor for the Orders entity set.
[QueryInterceptor("Orders")]
public Expression<Func<Order, bool>> OnQueryOrders()
詳細については、「方法: データ サービス メッセージを先に取得する (WCF Data Services)」を参照してください。
クエリ以外の操作を処理するときに呼び出される変更インターセプターは、void (Visual Basic の場合は Nothing) を返す必要があります。 変更インターセプター メソッドは、次の 2 つのパラメーターを受け取る必要があります。
エンティティ セットのエンティティ型との互換性がある型のパラメーター。 データ サービスが変更インターセプターを呼び出すとき、このパラメーターの値には、要求によって送信されたエンティティ情報が反映されます。
型 UpdateOperations のパラメーター。 データ サービスが変更インターセプターを呼び出すとき、このパラメーターの値には、要求が実行しようとしている操作が反映されます。
次の例は、変更インターセプターの定義の例を示します。
' Define a change interceptor for the Products entity set.
<ChangeInterceptor("Products")> _
Public Sub OnChangeProducts(ByVal product As Product, _
ByVal operations As UpdateOperations)
// Define a change interceptor for the Products entity set.
[ChangeInterceptor("Products")]
public void OnChangeProducts(Product product, UpdateOperations operations)
詳細については、「方法: データ サービス メッセージを先に取得する (WCF Data Services)」を参照してください。
先に取得する処理には、次の属性がサポートされます。
- [QueryInterceptor( EnitySetName )]
ターゲットのエンティティ セット リソースに対する HTTP GET 要求が受信されると、QueryInterceptorAttribute 属性が適用されたメソッドが呼び出されます。 これらのメソッドは、常にExpression<Func<T,bool>>
の形式のラムダ式を返す必要があります。
- [ChangeInterceptor( EnitySetName )]
ターゲットのエンティティ セット リソースに対する HTTP GET 以外の HTTP 要求が受信されたとき、ChangeInterceptorAttribute 属性が適用されたメソッドが呼び出されます。 これらのメソッドは、常に void (Visual Basic の場合は Nothing) を返します。
詳細については、「方法: データ サービス メッセージを先に取得する (WCF Data Services)」を参照してください。