2013-06-18 50 views
13

我用我所有的API響應的通用返回類型:的ASP.NET Web API幫助頁面 - 如何顯示通用返回類型的文檔

public HttpStatusCode statusCode { get; set; } 
    public string error { get; set; } 
    public IDictionary<string, string> errorfor { get; set; } 
    public T result { get; set; } 

和API:

/// <summary> 
/// GET Order API 
/// </summary> 
/// <returns> return list of orders {Order} </returns> 

public HttpResponseMessage Get(){ 
    var response = new BaseResponseMessage<IList<Order>>(); 
    //some more codes 
    response.result = orders; 
    return Request.CreateResponse(HttpStatusCode.OK, response); 
} 

當然,我的API幫助頁面在示例Response主體中不顯示Order。是否可以配置幫助頁面生成器顯示泛型類型?謝謝!

+0

,但如何做,使感覺...因爲我的回覆已經超過6個月,並且自那時起發生了2次...答案有時間背景,對嗎? :-) –

回答

2

HelpPage無法猜測只有您擁有的簽名的操作的返回類型。正如你所知道的HelpPage生成不會在正常請求期間發生,但是依賴於靜態信息。

雖然有一個解決方法。您可以查看Areas\HelpPage\App_Start\HelpPageConfig.cs中的以下注釋代碼,該代碼可讓您爲操作指定特定的返回類型。

//// Uncomment the following to correct the sample response when the action returns an HttpResponseMessage with ObjectContent<string>. 
//// The sample will be generated as if the controller named "Values" and action named "Post" were returning a string. 
//config.SetActualResponseType(typeof(string), "Values", "Post"); 

我知道這個解決方法對您來說太麻煩了,因爲您提到過所有操作都有這種簽名。

您可以通過創建一個自定義屬性來通知返回類型並在操作上對其進行修飾,從而擴展HelpPage。然後您可以修改已安裝的HelpPage代碼以查找這些屬性。

+0

謝謝!我會研究它 – SamSerious

+0

謝謝,這個作品! – DanKodi

17

的Web API 2.1幫助頁面現在這樣做:http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21#help-page

您還可以檢查出返回新ResponseTypeAttribute標準HttpResponseMessage:我注意到你解答我的答覆

/// <summary> 
/// GET Order API 
/// </summary> 
[ResponseType(typeof(List<Order>))] 
public HttpResponseMessage Get() 
{ 
    var orders = new List<Order>(); 
    return Request.CreateResponse(HttpStatusCode.OK, orders); 
} 
+2

請注意任何嘗試此操作的人:從2.1開始,這種方式可行,但如果您的泛型類具有公共的非默認構造函數,它似乎會中斷(至少對我來說)。 – JSideris

+2

找到了解決上述問題的解決方法:確保模型具有公共默認構造函數。見http://aspnetwebstack.codeplex.com/workitem/1480 – JSideris

+0

工作很好。很簡單的方法來做到這一點。併爲我的複雜對象工作。 – Zapnologica

相關問題