我有以下网络服务:
[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
值之间的区别?CanViewSecretData
属性。这解决了合法的null
问题,但似乎很麻烦。SecretDataType GetSecretData(long projectId)
以检索机密数据,如果用户无权调用,则返回错误。这样可以保持数据协定的清晰,但是我发现最终需要调用许多单独的操作才能构建完整的对象。那里有更好的方法吗?
答案 0 :(得分:2)
我不知道你正在使用什么框架,但从一般的Web服务角度来看,这就是我的建议。在Project
的XSD中,向SecretData
添加可选的Project
元素。如果不允许用户阅读SecretData
,请不要在响应中包含该元素。否则,请包含该元素,并在SecretData
为null
时将xsi:nil
属性设置为true
。