Intercettori (WCF Data Services)
WCF Data Services consente a un'applicazione di intercettare messaggi di richiesta in modo che sia possibile aggiungere la logica personalizzata a un'operazione. È possibile utilizzare questa logica personalizzata per convalidare i dati nei messaggi in arrivo. È inoltre possibile utilizzarla per limitare ulteriormente l'ambito di una richiesta di query, inserendo ad esempio criteri di autorizzazione personalizzati per le singole richieste.
L'intercettazione viene eseguita specificando metodi attribuiti in modo specifico nel servizio dati. Questi metodi vengono chiamati da WCF Data Services al momento appropriato durante l'elaborazione del messaggio. Gli intercettori vengono definiti per le singole entità e, a differenza delle operazioni del servizio, i metodi dell'intercettore non accettano parametri dalla richiesta. I metodi dell'intercettore di query, chiamati durante l'elaborazione di una richiesta GET HTTP, devono restituire un'espressione lambda che determina se un'istanza del set di entità dell'intercettore deve essere restituita nei risultati della query. Questa espressione viene utilizzata dal servizio dati per definire ulteriormente l'operazione richiesta. Di seguito viene riportato un esempio di definizione di un intercettore di query.
' 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()
Per ulteriori informazioni, vedere Procedura: intercettare messaggi del servizio dati (WCF Data Services).
Gli intercettori di modifiche, chiamati durante l'elaborazione di operazioni non di query, devono restituire void (Nothing in Visual Basic). I metodi dell'intercettore di modifiche devono accettare i due parametri seguenti:
Un parametro di un tipo compatibile con il tipo di entità del set di entità. Quando il servizio dati richiama l'intercettore di modifiche, il valore di questo parametro riflette le informazioni sull'entità inviate dalla richiesta.
Un parametro di tipo UpdateOperations. Quando il servizio dati richiama l'intercettore di modifiche, il valore di questo parametro riflette l'operazione tentata dalla richiesta.
Di seguito viene riportato un esempio di definizione di un intercettore di modifiche.
' 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)
Per ulteriori informazioni, vedere Procedura: intercettare messaggi del servizio dati (WCF Data Services).
Gli attributi che seguono sono supportati per l'intercettazione.
[QueryInterceptor( EnitySetName )]
Metodi a cui è applicato l'attributo QueryInterceptorAttribute vengono chiamati quando una richiesta GET HTTP viene ricevuta per la risorsa del set di entità di destinazione. Questi metodi devono restituire sempre un'espressione lambda nel formato Expression<Func<T,bool>>.[ChangeInterceptor( EnitySetName )]
Metodi a cui è applicato l'attributo ChangeInterceptorAttribute vengono chiamati quando una richiesta HTTP diversa da GET viene ricevuta per la risorsa del set di entità di destinazione. Questi metodi devono restituire sempre void (Nothing in Visual Basic).
Per ulteriori informazioni, vedere Procedura: intercettare messaggi del servizio dati (WCF Data Services).