14

我对所有 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 帮助页面当然不会在示例响应正文中显示订单。是否可以配置帮助页面生成器以显示通用类型?谢谢!

4

2 回答 2

19

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);
}
于 2014-02-13T23:04:37.593 回答
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 代码以查找这些属性。

于 2013-06-18T07:53:15.777 回答