攔截器 (WCF Data Services)
WCF Data Services 可讓應用程式攔截要求訊息,讓您可以將自訂邏輯加入至作業。 您可以使用此自訂邏輯驗證傳入訊息中的資料。 您還可以使用它進一步限制查詢要求的範圍,例如,以根據要求來插入自訂授權原則。
攔截由資料服務中特別屬性化的方法執行。 在訊息處理期間的適當時間點,WCF Data Services 會呼叫這些方法。 攔截器是依實體集為基礎而定義的,而且攔截器方法不像服務作業一樣可以接受要求的參數。 查詢攔截器方法會在處理 HTTP GET 要求時呼叫,必須傳回 Lambda 運算式以判斷查詢結果是否應傳回攔截器實體集的執行個體。 資料服務會使用此運算式進一步精簡所要求的作業。 以下是查詢攔截器的定義範例。
' 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()
如需詳細資訊,請參閱 HOW TO:攔截資料服務訊息 (WCF Data Services)。
變更處理非查詢作業時呼叫的攔截器,必須傳回 void (在 Visual Basic 為 Nothing)。 變更攔截器方法必須接受下列兩個參數:
其類型相容於實體集實體類型的參數。 資料服務叫用變更攔截器時,此參數的值會反映出要求所傳送的實體資訊。
類型為 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)
如需詳細資訊,請參閱 HOW TO:攔截資料服務訊息 (WCF Data Services)。
攔截支援的屬性如下。
[QueryInterceptor( EnitySetName )]
收到目標實體集資源的 HTTP GET 要求時,會呼叫套用 QueryInterceptorAttribute 屬性的方法。 這些方法必須永遠以 Expression<Func<T,bool>> 形式傳回 Lambda 運算式。[ChangeInterceptor( EnitySetName )]
當目標實體集資源收到 HTTP GET 要求以外的 HTTP 要求時,會呼叫套用 ChangeInterceptorAttribute 屬性的方法。 這些方法必須永遠傳回 void (在 Visual Basic 中為 Nothing)。
如需詳細資訊,請參閱 HOW TO:攔截資料服務訊息 (WCF Data Services)。