我有以下网络服务:
[DataContract]
public class Project
{
public long Id { get; set; }
public string Name { get; set; }
}
[OperationContract]
public Project GetProject(long Id);
现在我想添加一个SecretData
只应向某些用户公开的属性。我提出了几个想法,但没有一个适合我:
- 将一个可为空的
SecretData
属性添加到Project
. 如果用户无权查看,请将其设置为null
. 这似乎是最简单的方法,但消费者如何区分“无许可”null
和合法null
值? - 解决方案1,还要添加一个布尔
CanViewSecretData
属性。这解决了合法null
问题,但似乎很麻烦。 - 提供单独的操作
SecretDataType GetSecretData(long projectId)
来检索秘密数据,如果用户无权调用它,则返回错误。这使数据契约保持干净,但我看到我们最终需要调用许多单独的操作才能构造一个完整的对象。
那里有更好的方法吗?