Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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>");
        }