C# 如何自定义Swagger端点url?

C# 如何自定义Swagger端点url?,c#,asp.net-core,swagger,swagger-ui,swashbuckle,C#,Asp.net Core,Swagger,Swagger Ui,Swashbuckle,我有多个web api项目(微服务),我只想使用一个招摇过市的ui链接来公开它们。 为了这篇文章,我将调用每个web api项目EndpointA和EndpointB 我创建了一个swagger ui项目,并将每个端点添加到此项目中 My swagger ui项目Startup.cs public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseSwaggerUI(c => {

我有多个web api项目(微服务),我只想使用一个招摇过市的ui链接来公开它们。 为了这篇文章,我将调用每个web api项目EndpointAEndpointB

我创建了一个swagger ui项目,并将每个端点添加到此项目中

My swagger ui项目
Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSwaggerUI(c => {
        c.SwaggerEndpoint("/EndpointA/swagger/v1/swagger.json", "EndpointA");
        c.SwaggerEndpoint("/EndpointB/swagger/v1/swagger.json", "EndpointB");
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new Info
        {
            Version = "v1",
            Title = "EndpointA", // or "EndpointB",
        });
    });
}
我的端点A/B
Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSwaggerUI(c => {
        c.SwaggerEndpoint("/EndpointA/swagger/v1/swagger.json", "EndpointA");
        c.SwaggerEndpoint("/EndpointB/swagger/v1/swagger.json", "EndpointB");
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new Info
        {
            Version = "v1",
            Title = "EndpointA", // or "EndpointB",
        });
    });
}

我的问题是每个
swagger.json
文件都不包含端点前缀。路径不是
/EndpointA/Controller/Action
,而是
/Controller/Action
,这些路径无效


我曾尝试在我的swagger ui项目中设置自定义url前缀,如下
c.RoutePrefix=“EndpointA”。它适用于我的EndpointA,但我只能为所有端点设置一个,这样EndpointB就不起作用了

我还尝试使用
SwaggerGen
在每个端点中直接设置前缀,但我不知道如何/如果可能的话。

我最终使用注册api的基本路径

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UsePathBase(new PathString("/EndpointA"));
    app.UseMvc();
}

另一种解决方案是使用swagger基本路径文档过滤器,如下所示:

public void ConfigureServices(IServiceCollection services)
{
     services.AddSwaggerGen(c =>
     {
         c.DocumentFilter<BasePathFilter>();
     });
 }

如果您有两个web API项目,那么您可能正在配置(或可以配置)两个
IApplicationBuilders
。您是否尝试过为每个项目显式配置swagger?换句话说,每个API都有一个专用的招摇过市界面。@mclark1129当然可以,但我的问题是,我的所有项目都只能有一个招摇过市界面吗?请看这里:。。。在右上角,有一个下拉列表来选择招摇规范,这就是你想要做的吗?@HelderSepulveda是的,就是这样,但是有不同的端点而不是版本。