Tenho um aplicativo C# / ASP.NET Core Minimal API com Swagger gerando uma especificação OpenAPI. Para corresponder ao yml de publicação, preciso adicionar um servidor com caminho e remover os elementos de caminho de grupos individuais.
Eu Program.cs
configuro o gerador com este código:
.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "My API",
Version = "2.0",
});
c.AddServer(new OpenApiServer
{
Url = "https://api.myapi.org.uk/api/v2",
Description = "Production"
});
c.AddServer(new OpenApiServer
{
Url = "https://localhost:{port}/api/v2",
Description = "Local",
Variables =
{
new ("port", new OpenApiServerVariable
{
Default = "7147",
}),
},
});
})
Depois, mapeie um ponto final em um grupo como:
var builder = app.MapGroup("/needs");
builder .MapGet("/", async (CancellationToken cancellationToken) => { ... });
Quando tento testar isso com a Swagger UI, recebo uma resposta 404. Mas se eu mover o caminho do servidor para o grupo, funciona perfeitamente.
.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "My API",
Version = "2.0",
});
c.AddServer(new OpenApiServer
{
Url = "https://api.myapi.org.uk/",
Description = "Production"
});
c.AddServer(new OpenApiServer
{
Url = "https://localhost:{port}/",
Description = "Local",
Variables =
{
new ("port", new OpenApiServerVariable
{
Default = "7147",
}),
},
});
})
// ...
var builder = app.MapGroup("/api/v2/needs");
builder .MapGet("/", async (CancellationToken cancellationToken) => { ... });
Eu tentei muitas combinações, mas não consigo descobrir o que está errado. Isso acontece por acaso de ser parte da especificação que não foi implementada corretamente ou há uma maneira de fazer funcionar?
Em última análise, a definição gerada precisa se parecer com
openapi: 3.0.1
info:
title: My API
version: '2.0'
servers:
- url: https://myapi.org.uk/api/v2
description: Production
- url: 'https://localhost:{port}'
description: Local
variables:
port:
default: '7147'
paths:
/needs:
get:
...
Devemos usar
app.UsePathBase
para consertar o problema. Aqui está meu código de teste.Microsoft.AspNetCore.OpenApi
pacote é necessário.