2016-09-19 35 views
2

在揚鞭UI我得到這樣一個模型:ASP.NET揚鞭的IEnumerable <T>

Inline Model [ 
    Inline Model 1 
] 
Inline Model 1 { 
    Id (string, optional), 
    ConnectionString (string, optional), 
    ConnectionState (string, optional) 
} 

休息了一會找方法,如:

public IEnumerable<Device> Get() 
{ 
    return new List<Device>(); 
} 

爲什麼顯示不正確?

從評論

public class SwaggerConfig 
{ 
    public static void Register() 
    { 
     var thisAssembly = typeof(SwaggerConfig).Assembly; 
     GlobalConfiguration.Configuration .EnableSwagger(c => { c.SingleApiVersion("v1", "api"); }) .EnableSwaggerUi(c => { }); 
    } 
} 

public class Device 
{ 
    public string Id { get; set; } 
    public string ConnectionString { get; set; } 
    public string ConnectionState { get; set; } 
} 
+0

你能舉個例子應該如何顯示?或者,你可以嘗試用'ResponseTypeAttribute'指定響應類型,並檢查它是否改變了它的顯示方式。 – Patrick

+0

應該是這樣的:[ 設備 ] 設備{ ID(string,可選), 的ConnectionString(string,可選), ConnectionState(string,可選) } – user2191213

+0

我試圖創建一個新的重現您的問題Web API Project和安裝的招搖,結果就像是想要的一樣。你可以發佈你的Swagger配置嗎?你也可以告訴我,「設備」是由你定義還是來自另一個程序集? – Patrick

回答

2

好像揚鞭和/或NSwag不處理泛型列表/的IList/IEnumerable的類型非常好作爲基礎型,也許是因爲一些框架,可以嘗試添加揚鞭配置與Swagger連接不理解他們。

我已經通過將我的列表包裝在另一個對象中解決此問題。所以,你的情況,你可能需要做一些事情,如:

public ListResponseObject<T>() 
{ 
    public IEnumerable<T> ResponseList {get; set;} 
} 

,然後從控制器返回這樣的:

public ListResponseObject<Device> Get() 
{ 
    return new ListResponseObject<Device>{ResponseList = new List<Device>()}; 
} 

不是那麼簡單......但應該更好地得到它通過揚鞭。

我們已經利用這個優勢。我們已將此技術應用於所有控制器(或類似的東西),因此我們得到了更加標準化的響應。我們也可以這樣做:

public ListResponseObject<T>() : ResponseObject<T> 
{ 
    public IEnumerable<T> ResponseList {get; set;} 
} 


public ResponseObject<T>() 
{ 
    public string Message {get; set;} 
    public string Status {get; set;} 
} 

現在你有一個容器可以使下游處理更容易一些。

不是一個確切的答案,而是解決方法,這對我們很有幫助。因人而異

UPDATE:這裏有一個問題我張貼在NSwag GitHub的issues響應:

我認爲它正確的是。目前swagger和json模式不支持泛型(僅用於數組),因此所有通用類型都擴展爲非泛型/特定類型......儘管模型應該是正確的,但最終可能會有很多類...

的增強支持仿製藥計劃,但是這將是與招搖不符合,只用nswag工作...(在招搖UI不支持)