Asp.net core 在ASP.NET核心中以编程方式获取招摇过市URL

Asp.net core 在ASP.NET核心中以编程方式获取招摇过市URL,asp.net-core,swagger,swashbuckle,asp.net-core-5.0,Asp.net Core,Swagger,Swashbuckle,Asp.net Core 5.0,我使用的是ASP.NETCore5和Swagger。我知道如何使用招摇过市,它工作正常 Swagger在foo:5001/Swagger上提供,但我需要在运行时以编程方式确定该URL 我该怎么做 我已经试过了: 将它IEnumerable放入某个helper/controller类,但这显示了除swagger之外的所有路线 在端点路由和检查IEndpointRouteBuilder时获取它,但它再次向我显示了除swagger之外的所有路由 根据的来源,您可以使用类的实例SwaggerUIO

我使用的是ASP.NETCore5和Swagger。我知道如何使用招摇过市,它工作正常

Swagger在
foo:5001/Swagger
上提供,但我需要在运行时以编程方式确定该URL

我该怎么做


我已经试过了:

  • 将它
    IEnumerable
    放入某个helper/controller类,但这显示了除swagger之外的所有路线

  • 在端点路由和检查
    IEndpointRouteBuilder
    时获取它,但它再次向我显示了除swagger之外的所有路由

  • 根据的来源,您可以使用类的实例
    SwaggerUIOptions

  • 在DI容器中注册实例:
  • 使用已配置的实例:
  • app.UseSwaggerUI(app.ApplicationServices.GetRequiredService());
    
  • 将实例注入任何控制器/类:
  • public WeatherForecastController(ILogger记录器、SwiggerUIOptions和SwiggerOptions)
    {
    }
    
    属性
    RoutePrefix
    包含招摇过市前缀(不带前导“/”)


    只有当options对象传递给
    UseSwaggerUI
    方法(从6.0.0版开始提供)时,这种想法才有效。如果使用回调调用
    UseSwaggerUI
    (如
    UseSwaggerUI(a=>{a.RoutePrefix=string.Empty;})
    ),它将不起作用。

    可能不是您想要的,但从IConfiguration中存储的值配置该Swigger路由可能更容易,然后你也可以在其他组件中获取相同的值。¯\_(ツ)_/¯
    var options = new SwaggerUIOptions 
    {
        RoutePrefix = "swagger"
    };
    options.SwaggerEndpoint("/swagger/v1/swagger.json", "waiting_list v1");
    services.AddSingleton(options);
    
    app.UseSwaggerUI(app.ApplicationServices.GetRequiredService<SwaggerUIOptions>());
    
    public WeatherForecastController(ILogger<WeatherForecastController> logger, SwaggerUIOptions swaggerOptions)
    {
    }