如何根据用户使用属性的角色在WEB API响应中包含/排除属性?例如:
public class Employee
{
public string FullName { get; set;}
[DataMember(Role="SystemAdmin")] // included only for SystemAdmins
public string SSN { get; set; }
}
答案 0 :(得分:3)
您可以使用条件序列化,具体取决于您在web api中使用的序列化程序。
如果你只是从Web API返回JSON那么简单 - 我只使用JSON序列化程序,这个解决方案适合我。默认情况下,Web API使用JSON.Net进行JSON序列化。您可以添加一个返回bool的ShouldSerialize方法。在序列化中,您可以测试用户是否为IsInRole
public class Employee
{
public string Name { get; set; }
public string Manager { get; set; }
public bool ShouldSerializeManager()
{
// don't serialize the Manager property for anyone other than Bob..
return (Name == "Bob");
}
}
更多details
使用JSON.Net Web API序列化时,[JsonIgnore]属性全部或全无。
其他序列化程序需要不同的方法......
XmlSerializer也支持此功能,但您必须启用它
config.Formatters.XmlFormatter.UseXmlSerializer = true;
datacontract序列化程序是默认值。
如果使用这个,你必须在属性中添加逻辑,如果为null则省略它们。如果你在其他地方使用这个类,这可能是个问题。 [IgnoreDataMember]属性全部或全无。
[DataContract]
public class Person
{
private string firstName;
[DataMember(IsRequired = false, EmitDefaultValue = false)]
public string FirstName
{
get
{
//Put here any condition for serializing
return string.IsNullOrWhiteSpace(firstName) ? null : firstName;
}
set
{
firstName = value;
}
}
}