ASP 核心为所有端点生成完整路径
ASP Core generate full paths for all endpoints
我需要检索 ASP 核心应用程序中的所有端点并生成它们的完整路径。
示例:/a/b/c/endpoint
、x/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)
创建您自己的数据源。将其与您之前存储的路径基础相结合。
并将所有这些填充到其他服务对象中供以后使用。
除非有人能指出更简单的方法?
我需要检索 ASP 核心应用程序中的所有端点并生成它们的完整路径。
示例:/a/b/c/endpoint
、x/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)
创建您自己的数据源。将其与您之前存储的路径基础相结合。
并将所有这些填充到其他服务对象中供以后使用。
除非有人能指出更简单的方法?