Michael war richtig zu erwähnen ApiExplorer
. Dies gibt Ihnen Details zu allen WebApi-Methoden für Sie. Sie müssen es nur so formatieren, wie Sie die Antwort wollen.
Hier ist ein einfaches Beispiel, um eine Liste aller Methoden mit ihren Parametern und Rückgabetypen zu erhalten. Sie können natürlich machen diese viel umfassender - nur die Objekte wechseln Sie zu finden, was Sie brauchen:
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; }
}
}
Das Schöne daran ist, dass es ein WebAPI selbst nennen, so dass Sie die HttpClient
können anrufen und zu verarbeiten mit http://www.localhost.com/api/ApiMethod/Methods. Hier ist ein Beispiel JSON Antwort:
[
{
"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
}
]
}
]
geht nach vorne
Ersten XML-Dokument kommentiert, ist nicht so eindeutig, aber es gibt ein Tutorial auf MSDN Blogs.
Auch gibt es andere Pakete zur Verfügung, die Sie verwenden können, in Haken, stehlen, die ähnlich zu tun, was Sie brauchen, zum Beispiel
Mehr Details zu diesen in VS Mag
Überprüfen Sie [ApiExplorer] (http://blogs.msdn.com/b/yaohuang1/archive/2012/06/15/using-apiexplorer-to-export-ap Ich-Informationen-zu-Postman-a-Chrome-Erweiterung-für-Test-Web-Apis.aspx), es könnte Sie in Gang bringen. – Michael
Das gibt mir diese: - \t \t methodInfos \t {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 {void set_BaseAddress (System.Uri)} \t + \t \t [3] \t {System.TimeSpan get_Timeout()} \t etc ... Es bietet nicht die Methoden, die der Entwickler geschrieben hat, wie "GetAllCustomers()" – Sarah
Es scheint, dass Kobi Recht hat, wenn es "nicht" sagt kenne "irgendetwas über deine spezifischen API URLs". Vielleicht sollte ich etwas anderes anstelle von HTTPClient verwenden? – Sarah