使用PathBase和Swashbuckle进行Swagger文档

lmvvr0a8  于 2023-05-06  发布在  Hbase
关注(0)|答案(2)|浏览(202)

我已经使用中间件UsePathBase("/api/something/else")设置了我的ASP.NET核心,我的控制器是这样定义的:

[ApiController]
[Route("/[controller]")]
public class WeatherForecastController : ControllerBase

具体的端点定义如下

[HttpGet]
public async Task<IEnumerable<ForecastRecord>> Get()

当我运行应用程序时,我可以像这样访问端点:

/WeatherForecast
/api/something/else/WeatherForecast

当我得到Swagger文档时,我得到了这个:

"servers": [
    {
      "url": "/api/something/else"
    }
  ],
  "paths": {
    "/WeatherForecast": {
      "get": {
        "tags": [
          "WeatherForecast"
        ],

正如你所看到的,servers元素有一个/api/something/else的条目,但是当我运行SwaggerUI时,我没有看到前缀为/api/something/else的端点:

我想知道是否有一种方法可以强制SwaggerUI将端点的前缀值设置为UsePathBase

frebpwbc

frebpwbc1#

在这里和那里玩了中间件调用的顺序,我找到了解决这个问题中描述的问题的正确组合是:

//1. Add SwaggerUI
app.UseSwaggerUI(c =>
{
  c.RoutePrefix = "api/something/else";
  c.SwaggerEndpoint("swagger/v1/swagger.json", "Name");
});

//2. Set BasePath
app.UsePathBase("/api/something/else");

//3. Add Swagger
app.UseSwagger();

按照该顺序,Swagger UI将正确显示端点:

ar7v8xwq

ar7v8xwq2#

作为GustavoTM的更新,您需要执行以下操作才能使其立即工作。

//1. Add SwaggerUI
app.UseSwaggerUI(c =>
{
    c.RoutePrefix = "api/something/else/swagger";
    c.SwaggerEndpoint("/api/something/else/swagger/v1/swagger.json", "My Cool API");
});

//2. Set BasePath
app.UsePathBase(new PathString("/api/something/else"));

//3. Add Swagger
app.UseSwagger(c =>
{
    c.RouteTemplate = "swagger/{documentname}/swagger.json";
});

//4. use routing
app.UseRouting();

相关问题