Как я могу найти конечную точку из URL? - PullRequest
0 голосов
/ 25 января 2020

Я использую маршрутизацию конечной точки, и я хотел бы найти правильный объект конечной точки для данного URL-адреса и, возможно, метод запроса. Если я могу хотя бы найти конечную точку на основе URL, это было бы полезно. По сути, я пытаюсь реализовать следующий метод.

public Endpoint GetEndpoint(HttpContext httpContext, string url, string requestMethod)
{
    // I can get all of the endpoints
    var endpointDataSource = httpContext.RequestServices.GetService<EndpointDataSource>();
    var endpoints = endpointDataSource.Endpoints;

    // But I'm not sure what to do here
}

Я подумал, что, возможно, я мог бы использовать DefaultLinkParser.cs , но до сих пор я не понял этого.

1 Ответ

0 голосов
/ 25 января 2020

Я не уверен, есть ли лучший способ, но это, кажется, работает

public Endpoint GetEndpoint(HttpContext httpContext, string url, string requestMethod)
{
    var routeValues = new RouteValueDictionary();
    var endpointDataSource = httpContext.RequestServices.GetService<EndpointDataSource>();
    var endpoints = endpointDataSource.Endpoints.OfType<RouteEndpoint>();

    foreach (var endpoint in endpoints)
    {
        var templateMatcher = new TemplateMatcher(TemplateParser.Parse(endpoint.RoutePattern.RawText), new RouteValueDictionary());
        if (!templateMatcher.TryMatch(url, routeValues)) continue;
        var httpMethodAttribute = endpoint.Metadata.GetMetadata<HttpMethodAttribute>();
        if (httpMethodAttribute != null && !httpMethodAttribute.HttpMethods.Any(x => x.Equals(requestMethod, StringComparison.OrdinalIgnoreCase))) continue;
        return endpoint;
    }

    return null;
}

У меня есть некоторые идеи из этого { ссылка }

...