ASP 核心为所有端点生成完整路径

ASP Core generate full paths for all endpoints

我需要检索 ASP 核心应用程序中的所有端点并生成它们的完整路径。

示例:/a/b/c/endpointx/y/endpoint、...

这些端点需要包括控制器操作以及在 StartUp 中使用 Map*() 方法手动定义的端点。

我可以使用以下方法检索端点列表:

services.GetRequiredService<EndpointDataSource>().Endpoints;

但我找不到为 Endpoint 创建相应完整路径的方法,尤其是当该端点位于分支 ASP 管道内时。端点对象有一个可以使用的 RoutePattern 属性 但我们仍然需要分支管道的基本路径。

干杯

换句话说,您有一个分支请求管道,在多个分支中调用 .UseEndpoints。但是当 .Map 中间件调整 Request.Path & Request.PathBase 时,端点路由忽略了这一变化。

我认为 link 一代不支持此功能。您可能应该退后一步,重新评估是否真的需要使用 .Map。或者至少 preserveMatchedPathSegment = true 过载。

快速浏览 source code 之后。

每个 .Map 方法都为该分支中间件管道创建一个单独的 IApplicationBuilder

调用 .UseRouting() 创建一个 IEndpointRouteBuilder.

然后 .UseEndpoints() 使用 IEndpointRouteBuilder 来定义所有端点。

下面是我尝试的简要概述。

编写您自己的扩展方法来替换 .Map.UseEndpoints 并在您的 Startup class.

中使用它们

IApplicationBuilder.Properties.

中存储(或合并)新路径库

然后在您的 .UseEndpoints() 回调中,您可以调用真正的回调。然后使用 EndpointDataSource src = new CompositeEndpointDataSource(IEndpointRouteBuilder.DataSources) 创建您自己的数据源。将其与您之前存储的路径基础相结合。

并将所有这些填充到其他服务对象中供以后使用。

除非有人能指出更简单的方法?