У меня есть несколько шаблонов маршрутов, как показано ниже, и множество контроллеров, которые включают несколько конечных точек.
Project \ App_Start \ WebApiConfig.cs:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Code omission
config.Routes.MapHttpRoute(
name: "Template 1",
routeTemplate: "api/{controller}/{id}/action"
);
config.Routes.MapHttpRoute(
name: "Template 2",
routeTemplate: "api/master/{controller}/{id}/{history}",
defaults: new { id = RouteParameter.Optional, history = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Default template",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Какя могу получить список всех маршрутов (конечных точек) в зависимости от существующих контроллеров и их методов?
Я ожидаю получить что-то вроде:
GET: api/xxx/
PUT: api/xxx/{id}
DELETE: api/xxx/{id}
PUT: api/yyy/{id}
и т. д. .
Обновление # 1
Я попробовал совет Чарльза, но, похоже, он показывает только шаблоны маршрутов
Обновление # 2
Я попробовал этот совет .
diff --git a/Project/App_Start/WebApiConfig.cs b/Project/App_Start/WebApiConfig.cs
index 9b5a05e..6eb376f 100755
--- a/Project/App_Start/WebApiConfig.cs
+++ b/Project/App_Start/WebApiConfig.cs
@@ -1,15 +1,33 @@
namespace Project
{
+ public class ObservableDirectRouteProvider : IDirectRouteProvider
+ {
+ public IReadOnlyList<RouteEntry> DirectRoutes { get; private set; }
+
+ public IReadOnlyList<RouteEntry> GetDirectRoutes(HttpControllerDescriptor controllerDescriptor, IReadOnlyList<HttpActionDescriptor> actionDescriptors, IInlineConstraintResolver constraintResolver)
+ {
+ var defaultDirectRouteProvider = new DefaultDirectRouteProvider();
+ var directRoutes = defaultDirectRouteProvider.GetDirectRoutes(controllerDescriptor, actionDescriptors, constraintResolver);
+ DirectRoutes = DirectRoutes?.Union(directRoutes).ToList() ?? directRoutes;
+ return directRoutes;
+ }
+ }
+
/// <summary>
/// コンフィグクラス
/// </summary>
public static class WebApiConfig
{
+ public static ObservableDirectRouteProvider GlobalObservableDirectRouteProvider = new ObservableDirectRouteProvider();
/// <summary>
/// コンフィグ登録
@@ -26,7 +44,7 @@ namespace Project
config.EnableCors(cors);
- config.MapHttpAttributeRoutes();
+ config.MapHttpAttributeRoutes(GlobalObservableDirectRouteProvider)
diff --git a/Project/Global.asax.cs b/Project/Global.asax.cs
index 12bab21..afa6c5d 100644
--- a/Project/Global.asax.cs
+++ b/Project/Global.asax.cs
@@ -24,6 +25,11 @@ namespace Project
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
+ var registeredRouteList = WebApiConfig.GlobalObservableDirectRouteProvider.DirectRoutes;
+ for (int i = 0; i < registeredRouteList.Count; i++)
+ {
+ System.Diagnostics.Debug.WriteLine(registeredRouteList[i].Route.RouteTemplate);
+ }
}
Мне удалось получить список конечных точек, но этот список не включает все конечные точки.
Как я понимаю, в этот список входят конечные точки, где есть явный атрибут маршрута, например:
[RoutePrefix("api/xxx")]
public class XXXController : ApiController
// OR
[HttpGet]
[Route("{Id}/history")]
public HttpResponseMessage Get([FromUri] int id)
Но конечные точки без присоединенных RoutePrefix
или Route
не включены в список.