WCF Dataservice – 在返回结果之前修改对象?

我正在使用WCF数据服务,我有一些字段/属性,我想在发送回客户端之前“空白”(设置值为空字符串或null)。

例如:用户表有密码列,我不想将值传递给客户端。 这是一个示例,应用程序中还有其他此类列,出于安全/隐私原因,应排除该值。

很抱歉这样一个基本问题,我是WCF数据服务的新手,还没有找到任何有希望的线索。 我试过QueryInterceptors但没有运气。

有人能指出我正确的方向吗?

谢谢

IMO这超出了WCF数据服务的范围。 WCF数据服务旨在获取您的实体模型并根据访问规则公开它。 如果您的实体公开某些属性并且该实体已公开,则其属性仅为公共属性。 它适用于简单的CRUD方案或只读方案。

QueryInterceptor不会帮助你,因为它可以用于数据驱动的授权 – 这意味着QueryInterceptor可以添加一些额外的条件来过滤当前用户不允许看到的记录=它将过滤掉整个记录,但不会修改过滤结果。

没有挂钩到空字段,因为这是一个糟糕的方法。 如果您不想暴露某些字段,则它们根本不应成为公开实体的一部分。 您可以使用EDMX文件中的QueryView创建仅显示公共字段的第二个只读实体。 接下来,您需要修改DataServiceConfiguration访问规则。 您必须将访问规则删除到初始User实体集,并将读访问规则添加到该新实体集。

如果需要控制每个用户的访问规则,则必须在服务中使用某种身份validation ,并且必须在InitializeService方法中处理此问题(除非DataServiceConfiguration在其他位置可用)。 就像是:

 public static void InitializeService(DataServiceConfiguration config) { var context = ServiceSecurityContext.Current; if (context != null && context.PrimaryIdentity != null) { var userName = context.PrimaryIdentity.Name; if (SomeMethodToValidateUserPermissions(userName) { config.SetEntitySetAccessRule("Users", EntitySetRights.AllRead); } } config.SetEntitySetAccessRule("TrimmedUsers", EntitySetRights.AllRead); } 

通过更深入地进入WCF,可以有其他方法来限制对某些资源的访问,但这个方法最简单。