2017-02-17 59 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的所有字段。