2013-06-18 51 views
13

Tôi đang sử dụng một kiểu generic trở lại cho tất cả các phản ứng api của tôi:ASP.NET trang Web API giúp đỡ - làm thế nào để hiển thị kiểu trả về generic trong tài liệu

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

và trong 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); 
} 

Bây giờ tất nhiên trang Trợ giúp API của tôi không hiển thị Đơn đặt hàng trong nội dung Phản hồi mẫu. Có thể định cấu hình trình tạo Trang trợ giúp để hiển thị loại chung không? Cảm ơn!

+0

tôi nhận thấy bạn chưa được trả lời trả lời của tôi, nhưng làm thế nào mà làm cảm giác ... vì câu trả lời của tôi đã hơn 6 tháng và 2 bản phát hành đã xảy ra kể từ đó ... câu trả lời có ngữ cảnh thời gian, phải không? :-) –

Trả lời

2

Nó sẽ không thể cho HelpPage để đoán những gì sẽ là loại trở lại của một hành động chỉ với chữ ký mà bạn có. Như bạn đã biết, thế hệ HelpPage không xảy ra trong khi yêu cầu bình thường, nhưng là cái gì đó phụ thuộc vào thông tin tĩnh.

Có một giải pháp thay thế cho điều này. Bạn có thể xem mã nhận xét sau trong Areas\HelpPage\App_Start\HelpPageConfig.cs cho phép bạn chỉ định loại trả lại cụ thể cho một hành động.

//// 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"); 

Tôi hiểu rằng cách giải quyết này sẽ quá cồng kềnh vì bạn đã đề cập đến việc có loại chữ ký này cho tất cả các hành động của bạn.

Bạn có thể mở rộng HelpPage bằng cách tạo thuộc tính tùy chỉnh thông báo về kiểu trả về và trang trí nó trên các hành động. Sau đó bạn có thể sửa đổi mã HelpPage đã cài đặt để tìm các thuộc tính này.

+0

Cảm ơn bạn! Tôi sẽ xem xét nó – SamSerious

+0

Cảm ơn, công trình này! – DanKodi

17

Web API 2.1 Trợ giúp Trang hiện nay làm được điều này: http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21#help-page

Bạn cũng có thể kiểm tra trở về tiêu chuẩn HttpResponseMessage với mới ResponseTypeAttribute:

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

Lưu ý thận trọng đối với bất kỳ ai cố gắng điều này: kể từ 2.1 công trình này nhưng nó dường như phá vỡ (đối với tôi ít nhất) nếu lớp chung của bạn có một constructor không mặc định công khai. – JSideris

+2

Tìm thấy giải pháp cho vấn đề trên của tôi: đảm bảo mô hình có hàm tạo mặc định công khai. Xem http://aspnetwebstack.codeplex.com/workitem/1480 – JSideris

+0

Đã làm việc Tuyệt vời. Cách đơn giản tốt đẹp để làm điều đó. Và làm việc cho các đối tượng phức tạp của tôi là tốt. – Zapnologica

Các vấn đề liên quan