邁克爾提到ApiExplorer
是正確的。這爲您提供了所有WebApi方法的詳細信息。你只需要格式化你想要的反應。
下面是一個簡單的例子,用它們的參數和返回類型來獲取所有方法的列表。當然你也可以讓這個更全面的 - 只是瀏覽的對象找到你需要的東西:
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Description;
namespace WebApplication1.Controllers
{
public class ApiMethodController : ApiController
{
public IEnumerable<HelpMethod> GetMethods()
{
// get the IApiExplorer registered automatically
IApiExplorer ex = this.Configuration.Services.GetApiExplorer();
// loop, convert and return all descriptions
return ex.ApiDescriptions
// ignore self
.Where(d => d.ActionDescriptor.ControllerDescriptor.ControllerName != "ApiMethod")
.Select(d =>
{
// convert to a serializable structure
return new HelpMethod
{
Parameters = d.ParameterDescriptions.Select(p => new HelpParameter
{
Name = p.Name,
Type = p.ParameterDescriptor.ParameterType.FullName,
IsOptional = p.ParameterDescriptor.IsOptional
}).ToArray(),
Method = d.HttpMethod.ToString(),
RelativePath = d.RelativePath,
ReturnType = d.ResponseDescription.DeclaredType == null ?
null : d.ResponseDescription.DeclaredType.ToString()
};
});
}
}
public class HelpMethod
{
public string Method { get; set; }
public string RelativePath { get; set; }
public string ReturnType { get; set; }
public IEnumerable<HelpParameter> Parameters { get; set; }
}
public class HelpParameter
{
public string Name { get; set; }
public string Type { get; set; }
public bool IsOptional { get; set; }
}
}
的好處是,它是一個的WebAPI調用本身,所以你可以使用HttpClient
調用並進行處理使用http://www.localhost.com/api/ApiMethod/Methods。下面是一個示例JSON響應:
[
{
"Method": "GET",
"RelativePath": "api/Account/{id}",
"ReturnType": "WebApplication1.Models.Account",
"Parameters": [
{
"Name": "id",
"Type": "System.Int32",
"IsOptional": false
}
]
},
{
"Method": "POST",
"RelativePath": "api/Account",
"ReturnType": null,
"Parameters": [
{
"Name": "a",
"Type": "WebApplication1.Models.Account",
"IsOptional": false
}
]
},
{
"Method": "GET",
"RelativePath": "api/Maths?i={i}&j={j}",
"ReturnType": "System.Int32",
"Parameters": [
{
"Name": "i",
"Type": "System.Int32",
"IsOptional": false
},
{
"Name": "j",
"Type": "System.Int32",
"IsOptional": false
}
]
}
]
繼續前進
獲取XML文檔註釋出來也不是那麼明確的,但對MSDN Blogs的教程。
此外,還有其他的包,你可以用,勾成,來自該做類似於你需要的東西偷,例如
更多這些細節in VS Mag
檢查[ApiExplorer](http://blogs.msdn.com/b/yaohuang1/archive/2012/06/15/using-apiexplorer-to-export-ap i-information-to-postman-a-chrome-extension-for-testing-web-apis.aspx),它可能會讓你走。 – Michael 2014-12-03 09:32:48
這使我這些: - \t \t \t methodInfos {System.Reflection.MethodInfo [43]} \t System.Reflection.MethodInfo [] + \t \t [0] \t {System.Net.Http.Headers.HttpRequestHeaders get_DefaultRequestHeaders( )} \t System.Reflection.MethodInfo + \t \t [1] \t {的System.Uri get_BaseAddress()} \t + \t \t [2] \t {無效set_BaseAddress(的System.Uri)} \t + \t \t [3] \t {System.TimeSpan get_Timeout()} \t etc ... 它沒有提供開發人員寫的方法,比如「GetAllCustomers()」 – Sarah 2014-12-03 09:40:34
看來Kobi在說「不」知道「關於您的特定API網址的任何信息」。也許我應該使用別的東西而不是HTTPClient? – Sarah 2014-12-03 09:45:47