internal static void EnsureInitialized(this IHttpRoute route, Func <IReadOnlyCollection <IHttpRoute> > initializer) { Debug.Assert(route.GetType().Name == "RouteCollectionRoute", "Extension method only intended to support testing RouteCollectionRoute.EnsureInitialized"); var type = route.GetType(); var method = type.GetRuntimeMethod(nameof(EnsureInitialized), new[] { initializer.GetType() }); method.Invoke(route, new object[] { initializer }); }
public static IEnumerable <IHttpRoute> GetSubRoutes(this HttpConfiguration configuration) { IHttpRoute route = configuration.Routes["MS_attributerouteWebApi"]; PropertyInfo subRoutesProperty = route.GetType().GetProperty("SubRoutes"); return((IEnumerable <IHttpRoute>)subRoutesProperty.GetValue(route)); }
static void Main(string[] args) { HttpConfiguration configuration = new HttpConfiguration(); configuration.MapHttpAttributeRoutes(); configuration.EnsureInitialized(); IHttpRoute route = configuration.Routes["MS_attributerouteWebApi"]; PropertyInfo subRoutesProperty = route.GetType().GetProperty("SubRoutes"); IEnumerable <IHttpRoute> subRoutes = (IEnumerable <IHttpRoute>)subRoutesProperty.GetValue(route); IHttpRoute subRoute = subRoutes.First(); Console.WriteLine("Defaults:"); foreach (var item in subRoute.Defaults) { Console.WriteLine("{0,-12}{1}", item.Key, item.Value); } Console.WriteLine("\nDataTokens:"); foreach (var item in subRoute.DataTokens) { Console.WriteLine("{0,-12}{1}", item.Key, item.Value); } Console.WriteLine("\nConstraints:"); foreach (var item in subRoute.Constraints) { Console.WriteLine("{0,-12}{1}", item.Key, item.Value.GetType().Name); } }