WebApi2 - 如何将动态属性添加到模型
问题描述:
我希望这个问题已被问及之前,我只是没有找到它。我正在编写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(否则它会发送很多数据,这些数据不会被使用)。
这有道理吗?
任何想法将不胜感激。
本
答
使用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的所有字段。
我会创建新的类来返回像DTO – miechooy
每个帖子一个问题,请。 –