Skip to content

Instantly share code, notes, and snippets.

@markdstafford
Created July 26, 2013 18:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save markdstafford/6091320 to your computer and use it in GitHub Desktop.
Save markdstafford/6091320 to your computer and use it in GitHub Desktop.
context.Configurations.ResponsePipeline.OnEntryEnded((a =>
{
Type entityType = dataServiceContext.ResolveType(a.Entry.TypeName);
if (typeof(Product).IsAssignableFrom(entityType))
{
var properties = a.Entry.Properties as List<ODataProperty>;
if (properties == null)
{
properties = new List<ODataProperty>(a.Entry.Properties);
}
var odataPropertyToRemove = properties.Single(p => p.Name == "Description");
properties.Remove(odataPropertyToRemove);
a.Entry.Properties = properties;
}
}));
public static void RemoveProperties(this ODataEntry entry, params string[] propertyNames)
{
var properties = entry.Properties as List<ODataProperty>;
if (properties == null)
{
properties = new List<ODataProperty>(entry.Properties);
}
var propertiesToRemove = properties.Where(p => propertyNames.Any(rp => rp == p.Name));
foreach (var propertyToRemove in propertiesToRemove.ToArray())
{
properties.Remove(propertyToRemove);
}
entry.Properties = properties;
}
public static DataServiceClientResponsePipelineConfiguration RemoveProperties<T>(
this DataServiceClientResponsePipelineConfiguration responsePipeline,
Func<string, Type> resolveType,
params string[] propertiesToRemove)
{
return responsePipeline.OnEntryEnded((args) =>
{
Type resolvedType = resolveType(args.Entry.TypeName);
if (resolvedType != null && typeof(T).IsAssignableFrom(resolvedType))
{
args.Entry.RemoveProperties(propertiesToRemove);
}
});
}
context.Configurations.ResponsePipeline.RemoveProperties<Product>(context.ResolveType, "Description");
public class DataServiceClientResponsePipelineConfiguration
{
public DataServiceClientResponsePipelineConfiguration OnEntityMaterialized(Action<MaterializedEntityArgs> action);
public DataServiceClientResponsePipelineConfiguration OnEntryEnded(Action<ReadingEntryArgs> action);
public DataServiceClientResponsePipelineConfiguration OnEntryStarted(Action<ReadingEntryArgs> action);
public DataServiceClientResponsePipelineConfiguration OnFeedEnded(Action<ReadingFeedArgs> action);
public DataServiceClientResponsePipelineConfiguration OnFeedStarted(Action<ReadingFeedArgs> action);
public DataServiceClientResponsePipelineConfiguration OnMessageReaderSettingsCreated(
Action<MessageReaderSettingsArgs> messageReaderSettingsAction);
public DataServiceClientResponsePipelineConfiguration OnNavigationLinkEnded(Action<ReadingNavigationLinkArgs> action);
public DataServiceClientResponsePipelineConfiguration OnNavigationLinkStarted(Action<ReadingNavigationLinkArgs> action);
}
public static DataServiceClientRequestPipelineConfiguration RemoveProperties<T>(
this DataServiceClientRequestPipelineConfiguration requestPipeline,
params string[] propertiesToRemove)
{
return requestPipeline.OnEntryEnding((args) =>
{
if (typeof(T).IsAssignableFrom(args.Entity.GetType()))
{
args.Entry.RemoveProperties(propertiesToRemove);
}
});
}
public class DataServiceClientRequestPipelineConfiguration
{
public DataServiceClientRequestPipelineConfiguration OnEntityReferenceLink(
Action<WritingEntityReferenceLinkArgs> action);
public DataServiceClientRequestPipelineConfiguration OnEntryEnding(Action<WritingEntryArgs> action);
public DataServiceClientRequestPipelineConfiguration OnEntryStarting(Action<WritingEntryArgs> action);
public DataServiceClientRequestPipelineConfiguration OnMessageWriterSettingsCreated(
Action<MessageWriterSettingsArgs> args);
public DataServiceClientRequestPipelineConfiguration OnNavigationLinkEnding(Action<WritingNavigationLinkArgs> action);
public DataServiceClientRequestPipelineConfiguration OnNavigationLinkStarting(Action<WritingNavigationLinkArgs> action);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment