2013-07-17 41 views
1

幾個RESTful API通過查詢字符串參數(例如stackexchange的過濾器參數)爲返回的數據量提供調用者選項。如何使ASP Web API中的屬性返回可配置?

我想至少提供一定程度的可配置性以返回數據量,可能不一定達到相同級別的靈活性(儘管我沒有任何反應)但是具有單獨的視圖模型將不是一個可行的解決方案。

但是我很努力地在Web API中找到一個好點來添加某種屬性的白/黑名單。什麼是適當的方式來做到這一點?

回答

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" }; 

這會發送一個JSON,如{ "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設計。您也許可以使用操作篩選器從請求中獲取這些標準字段,並使用它從持久性存儲中獲取數據。