Share via


インターセプター (WCF Data Services)

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 つのパラメーターを受け取る必要があります。

  1. エンティティ セットのエンティティ型との互換性がある型のパラメーター。 データ サービスが変更インターセプターを呼び出すとき、このパラメーターの値には、要求によって送信されたエンティティ情報が反映されます。

  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)」を参照してください。

参照

概念

サービス操作 (WCF Data Services)