1

我希望以前有人问过这个问题,但我只是没有找到它。我正在 WebAPI2 中编写一组 Restful API。我了解 API 控制器将在其响应中返回模型。我的问题是,当需要额外数据时,我可以在这些模型中创建动态属性吗?

例如,我可能有一个如下所示的类:

public class FooModel
{
     public int FooId{get;set;}
     public string Description{get;set;}
}
public class BarModel
{
     public int BarId{get;set;}
     public string Description{get;set;}
}

我可以创建一个只检索 Foo、保存 Foo 等的服务。但是如果我需要一个返回 Foo 的服务,以及与该 Foo 相关联的所有 Bar,该怎么办。所以返回类需要如下所示:

public class FooModel
{
     public int FooId{get;set;}
     public string Description{get;set;}
     public List<BarModel> Bars{get;set;}
}

我需要为此创建一个全新的模型吗?或者在 WebAPI 中有一种方法可以将 Bars 属性动态添加到 FooModel 中。

在这个用例中,当保存一个 Foo 时,我不知道与之关联的 Bars。此外,为了减少带宽,我的前端代码中有一些地方需要在没有所有 Bars 的情况下获取 Foo(否则它会发送大量数据,而这些数据不会被使用)。

那有意义吗?

任何想法将不胜感激。

4

1 回答 1

1

使用 DTO 并使用默认值。

public class FooModel
{
    [DefaultValue(0)]
    public int FooId { get; set; } = 0;
    [DefaultValue("")]
    public string Description { get; set; } = "";

    public List<BarModel> Bars { get; set; }
    public bool ShouldSerializeBars() { return Bars != null && Bars.Any(); }
}

如果 FooId = 0 则该字段将被省略。这对于属性也适用于元素。您需要添加一个属性,但实际上还要设置默认值。

您还可以从其他类继承来扩展 DTO。

public class FooModel2 : FooModel
{
    [DefaultValue(0)]
    public int FooId2 { get; set; } = 0;
}

这个拥有 FooModel 的所有字段和 FooId2 字段。

于 2017-02-17T23:32:58.847 回答