oData WCF服务 - 隐藏元素

时间:2011-01-25 10:09:34

标签: wcf odata

我是WCF的新手。我的Web项目有一个ADO.NET实体数据模型(又名EF edmx),它具有实体容器名称JobSystemEntities

我创建了一个使用JobSystemEntities的简单oData WCF数据服务,效果很好:

public class JobService : DataService<JobSystemEntities>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("Jobs", EntitySetRights.ReadSingle);
    }

但是,这会公开Job上的所有属性。我想隐藏敏感数据,即Job表的Cost字段/属性/列。

2 个答案:

答案 0 :(得分:2)

我发布这个但是迟到了,但它可能对其他人有帮助。

您可以在班级上使用IgnoreProperties属性http://msdn.microsoft.com/en-us/library/system.data.services.ignorepropertiesattribute.aspx

您必须定义部分Job类才能执行此操作。有些东西:

namespace DAL.Entities
{
    [IgnoreProperties("Cost")]
    public partial class Job
    {

    }
}

答案 1 :(得分:0)

我做过类似的事情。这里有一个很好的起点:

http://weblogs.asp.net/rajbk/archive/2010/05/15/pre-filtering-and-shaping-odata-feeds-using-wcf-data-services-and-the-entity-framework-part-1.aspx

基本上,您需要将实体的受保护属性分离为另一个实体,该实体作为另一个实体的属性进行链接。完成后,用户使用Query Interceptor限制何时可以查看该受保护实体。

[QueryInterceptor("YourObjectsProtectedProperties")]
public Expression<Func<YourObjectsProtectedProperties, bool>> OnReadYourObjectsProtectedProperties()
{
if (ShowEntityToUser())
   return o => true == true;
return o => true == false;
}