如何从 url 中找到端点?

How can I find an endpoint from a url?

我正在使用端点路由,我想为给定的 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 但到目前为止我还没有想出来。

我不确定是否有更好的方法,但这似乎有效

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;
}

我从中得到了一些想法