2017-02-17 114 views
1

我希望这个问题已被问及之前,我只是没有找到它。我正在编写WebAPI2中的一组Restful API。 我明白,API控制器将在他们的回应中返回模型。我的问题是,当需要额外的数据时,我可以在这些模型中创建动态属性吗?WebApi2 - 如何将动态属性添加到模型

例如,我可以有一个类,看起来像这样:

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相关的所有酒吧。所以退货类需要看起来像这样:

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

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

在这个用例中,当保存一个Foo时,我不知道与它相关的酒吧。另外,为了减少带宽,我的前端代码中有一些地方需要获取没有所有酒吧的Foo(否则它会发送很多数据,这些数据不会被使用)。

这有道理吗?

任何想法将不胜感激。

+0

我会创建新的类来返回像DTO – miechooy

+0

每个帖子一个问题,请。 –

回答

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的所有字段。