Manipulate Data in the Cloud: C#: Intercept Queries and Changes : Listing 2
Methods designated as QueryInterceptors for a specified EntitySet can alter an inbound query or substitute a new query based on client principal identity or other per-request variables. Query expressions can implement simple restrictions, such as adding a Where constraint to a GET operation based on the requester's username. Similarly, ChangeInterceptors can perform data validation for updates to a specific entity instance.
[QueryInterceptor("Customers")]
public IQueryable<Customer> OnCustomersQuery
(IQueryable<Customer> inboundQuery)
{
if (WebOperationContext.Current.IncomingRequest.Method
== "GET")
return from o in inboundQuery where
o.Customers.ContactName ==
HttpContext.Current.User.Identity.Name select o;
if (WebOperationContext.Current.IncomingRequest.Method
== "POST")
return inboundQuery;
if (WebOperationContext.Current.IncomingRequest.Method
== "PUT")
return inboundQuery;
if (WebOperationContext.Current.IncomingRequest.Method
== "DELETE")
return inboundQuery;
return null;
}
[ChangeInterceptor("Customers")]
public void OnCustomersChange(Customer c,
ResourceActions action)
{
if (c.CustomerID != "BOGUS")
{
string msg = "Cannot ";
if (action == ResourceActions.Add)
{
msg += "insert ";
}
else if (action == ResourceActions.Change)
{
msg += "update ";
}
else if (action == ResourceActions.Delete)
{
msg += "delete ";
}
msg += "customer other than BOGUS.";
throw new WebDataServiceException(400, msg);
}
}