1

我有以下网络服务:

[DataContract]
public class Project
{
    public long Id { get; set; }
    public string Name { get; set; }
}

[OperationContract]
public Project GetProject(long Id);

现在我想添加一个SecretData只应向某些用户公开的属性。我提出了几个想法,但没有一个适合我:

  1. 将一个可为空的SecretData属性添加到Project. 如果用户无权查看,请将其设置为null. 这似乎是最简单的方法,但消费者如何区分“无许可”null和合法null值?
  2. 解决方案1,还要添加一个布尔CanViewSecretData属性。这解决了合法null问题,但似乎很麻烦。
  3. 提供单独的操作SecretDataType GetSecretData(long projectId)来检索秘密数据,如果用户无权调用它,则返回错误。这使数据契约保持干净,但我看到我们最终需要调用许多单独的操作才能构造一个完整的对象。

那里有更好的方法吗?

4

1 回答 1

2

我不知道您使用的是什么框架,但从一般 Web 服务的角度来看,这是我的建议。在 的 XSD 中Project,将可选SecretData元素添加到Project. 当不允许用户阅读SecretData时,不要在响应中包含该元素。否则,包含该元素,并且何时SecretDatanull属性设置xsi:niltrue

于 2012-03-04T20:18:28.707 回答