internal static IList <EndpointRouteInfo> GetRouteInfo(HttpContext context) { if (context == null) { throw Error.ArgumentNull(nameof(context)); } var routInfoList = new List <EndpointRouteInfo>(); var dataSource = context.RequestServices.GetRequiredService <EndpointDataSource>(); foreach (var endpoint in dataSource.Endpoints) { ControllerActionDescriptor controllerActionDescriptor = endpoint.Metadata.GetMetadata <ControllerActionDescriptor>(); if (controllerActionDescriptor == null) { continue; } var routeEndpoint = endpoint as RouteEndpoint; var metadata = endpoint.Metadata.GetMetadata <IODataRoutingMetadata>(); var info = new EndpointRouteInfo { DisplayName = endpoint.DisplayName, HttpMethods = endpoint.Metadata.GetMetadata <HttpMethodMetadata>()?.HttpMethods ?? EmptyHeaders, Pattern = routeEndpoint?.RoutePattern?.RawText ?? "N/A", IsODataRoute = metadata != null, }; routInfoList.Add(info); } return(routInfoList); }
internal async Task HandleJsonEndpointsAsync(HttpContext context) { if (context == null) { throw Error.ArgumentNull(nameof(context)); } List <EndpointRouteInfo> infos = new List <EndpointRouteInfo>(); EndpointDataSource dataSource = context.RequestServices.GetRequiredService <EndpointDataSource>(); foreach (var endpoint in dataSource.Endpoints) { ControllerActionDescriptor controllerActionDescriptor = endpoint.Metadata.GetMetadata <ControllerActionDescriptor>(); if (controllerActionDescriptor == null) { continue; } EndpointRouteInfo info = new EndpointRouteInfo { DisplayName = endpoint.DisplayName, HttpMethods = string.Join(",", GetHttpMethods(endpoint)), }; // template name RouteEndpoint routeEndpoint = endpoint as RouteEndpoint; if (routeEndpoint != null) { info.Template = routeEndpoint.RoutePattern.RawText; } else { info.Template = "N/A"; } IODataRoutingMetadata metadata = endpoint.Metadata.GetMetadata <IODataRoutingMetadata>(); if (metadata == null) { info.IsODataRoute = false; } else { info.IsODataRoute = true; } infos.Add(info); } JsonSerializerOptions options = new JsonSerializerOptions() { WriteIndented = true }; string output = JsonSerializer.Serialize(infos, options); context.Response.Headers["Content_Type"] = "application/json"; await context.Response.WriteAsync(output).ConfigureAwait(false); }
private static void AppendRoute(StringBuilder builder, EndpointRouteInfo routeInfo) { builder.Append("<tr>"); builder.Append($"<td>{routeInfo.DisplayName}</td>"); builder.Append($"<td>{string.Join(",", routeInfo.HttpMethods)}</td>"); if (routeInfo.Pattern == null) { builder.Append($"<td>N/A</td>"); } else if (routeInfo.HttpMethods.Contains("GET")) { builder.Append($"<td><a href=\"{routeInfo.Pattern}\">{routeInfo.Pattern}</a></td>"); } else { builder.Append($"<td>{routeInfo.Pattern}</td>"); } builder.AppendLine("</tr>"); }