如何自定义 Swagger 端点 url?
How to customize Swagger endpoint url?
我有多个 Web api 项目(微服务),我只想使用一个 swagger-ui link 来公开它们.
为了这个 post.[=20=,我将每个网络 api 项目称为 EndpointA 和 EndpointB ]
我创建了一个 swagger-ui 项目,并将每个端点添加到该项目。
我的 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");
});
}
我的端点A/BStartup.cs
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
直接在每个端点中设置前缀,但我不知道如何/如果可能的话。
我最终使用 UsePathBaseExtensions.UsePathBase(IApplicationBuilder, PathString)
Method 注册了我的 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>();
});
}
和过滤器:
public class BasePathFilter: IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
{
swaggerDoc.BasePath = "/EndpointA";
}
}
我有多个 Web api 项目(微服务),我只想使用一个 swagger-ui link 来公开它们. 为了这个 post.[=20=,我将每个网络 api 项目称为 EndpointA 和 EndpointB ]
我创建了一个 swagger-ui 项目,并将每个端点添加到该项目。
我的 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");
});
}
我的端点A/BStartup.cs
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
直接在每个端点中设置前缀,但我不知道如何/如果可能的话。
我最终使用 UsePathBaseExtensions.UsePathBase(IApplicationBuilder, PathString)
Method 注册了我的 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>();
});
}
和过滤器:
public class BasePathFilter: IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
{
swaggerDoc.BasePath = "/EndpointA";
}
}