如何配置ASP Web API中返回的属性?
几个RESTful API为调用者提供了返回数据量的选项,通常通过querystring参数(例如stackexchange的filter参数)实现 我希望至少为返回的数据量提供某种程度的可配置性,可能不一定要达到同样的灵活性(尽管我对此没有异议),但要达到这样的程度,拥有单个viewmodels将不是一个可行的解决方案如何配置ASP Web API中返回的属性?,api,asp.net-web-api,json.net,Api,Asp.net Web Api,Json.net,几个RESTful API为调用者提供了返回数据量的选项,通常通过querystring参数(例如stackexchange的filter参数)实现 我希望至少为返回的数据量提供某种程度的可配置性,可能不一定要达到同样的灵活性(尽管我对此没有异议),但要达到这样的程度,拥有单个viewmodels将不是一个可行的解决方案 然而,我正努力在WebAPI中找到一个好的点来添加某种属性白/黑列表。执行此操作的适当方法是什么?使用单个DTO返回字段子集的一种方法是为DTO中的可选属性提供可为空的类型 [
然而,我正努力在WebAPI中找到一个好的点来添加某种属性白/黑列表。执行此操作的适当方法是什么?使用单个DTO返回字段子集的一种方法是为DTO中的可选属性提供可为空的类型
[DataContract]
public class Dude
{
[DataMember]
public int Id { get; set; }
[DataMember(EmitDefaultValue = false)]
public string FirstName { get; set; }
[DataMember(EmitDefaultValue = false)]
public string MiddleName { get; set; }
[DataMember(EmitDefaultValue = false)]
public string LastName { get; set; }
[DataMember(EmitDefaultValue = false)]
public int? IQ { get; set; }
}
您需要获取客户机希望在响应中看到的字段列表,并在返回的数据实例中只填充这些字段,如下所示
return new Dude() { Id = 123, FirstName = "Johnny" };
这将发送类似于JSON的{“Id”:123,“FirstName”:“Johnny”}
。当另一个客户端请求sayLastName
时,您将返回newdude(){Id=123,LastName=“Bravo”}代码>和JSON将是{“Id”:123,“LastName”:“Bravo”}
这将适用于XML和JSON。如果只支持JSON,则不需要应用属性。只需要指示JSON.NET忽略空值
config.Formatters.JsonFormatter.SerializerSettings =
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
如何获取字段列表的最后一部分将取决于您的API设计。您可能可以使用操作筛选器从请求中获取这些标准字段,并使用它从持久性存储中获取数据。使用单个DTO返回字段子集的一种方法是为DTO中的可选属性提供可为空的类型
[DataContract]
public class Dude
{
[DataMember]
public int Id { get; set; }
[DataMember(EmitDefaultValue = false)]
public string FirstName { get; set; }
[DataMember(EmitDefaultValue = false)]
public string MiddleName { get; set; }
[DataMember(EmitDefaultValue = false)]
public string LastName { get; set; }
[DataMember(EmitDefaultValue = false)]
public int? IQ { get; set; }
}
您需要获取客户机希望在响应中看到的字段列表,并在返回的数据实例中只填充这些字段,如下所示
return new Dude() { Id = 123, FirstName = "Johnny" };
这将发送类似于JSON的{“Id”:123,“FirstName”:“Johnny”}
。当另一个客户端请求sayLastName
时,您将返回newdude(){Id=123,LastName=“Bravo”}代码>和JSON将是{“Id”:123,“LastName”:“Bravo”}
这将适用于XML和JSON。如果只支持JSON,则不需要应用属性。只需要指示JSON.NET忽略空值
config.Formatters.JsonFormatter.SerializerSettings =
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
如何获取字段列表的最后一部分将取决于您的API设计。您可以使用操作过滤器从请求中获取这些标准字段,并使用它从持久性存储中获取数据