1

一些 RESTful API 为调用者返回的数据量提供了选项,通常通过查询字符串参数(例如 stackexchange 的过滤器参数)。

我想至少为返回的数据量提供某种程度的可配置性,也许不一定具有相同级别的灵活性(尽管我没有任何反对意见),但到了拥有单个视图模型不会成为可行的解决方案。

然而,我正在努力在 Web API 中找到一个好点来添加某种属性白/黑名单。这样做的适当方法是什么?

4

1 回答 1

1

使用单个 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; }
}

您将需要获取客户有兴趣在响应中查看的字段列表,并填充您返回的 DTO 实例中的字段列表,如下所示。

return new Dude() { Id = 123, FirstName = "Johnny" };

这将发送一个像{ "Id":123, "FirstName":"Johnny" }. 当另一个客户要求说LastName时,您将返回new Dude() { Id = 123, LastName = "Bravo" };,JSON 将是{ "Id":123, "LastName":"Bravo" }

这适用于 XML 和 JSON。如果您只接受 JSON,则无需应用属性。只需要指示 JSON.NET 忽略空值。

config.Formatters.JsonFormatter.SerializerSettings =
        new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore
        };

如何获取字段列表的最后一部分将取决于您的 API 设计。您也许可以使用操作过滤器从请求中获取这些标准字段,并使用它从持久存储中获取数据。

于 2013-07-18T04:04:34.877 回答