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);
   }
}
comments powered by Disqus

Featured

Subscribe on YouTube