Версионный API с Swagger не обнаруживает операции API
Я реализовал API и интегрировал его с Swagger.
Запуск ConfigureServices:
services
.AddMvcCore()
.AddApiExplorer();
services.AddSwaggerGen(c => {
c.SwaggerDoc("v1", new Info {
Title = "API", Version = "v1"
});
});
Настройка запуска
app.UseSwagger(c => {
c.RouteTemplate = "{documentName}/configuration.json";
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/v1/configuration.json", "API");
c.RoutePrefix = "v1/docs";
})
контроллер
[Route("v1/[controller]")]
[ApiController]
public class SomeController : ControllerBase {}
Все идет нормально...
Работает как шарм. Однако мое обновление до последней [Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer][2]
не
Я следовал как за образцами, так и за документацией, но я не могу показать свои операции... Что мне здесь не хватает?
Запуск ConfigureServices
services
.AddMvcCore()
//.AddApiExplorer()
.AddVersionedApiExplorer( o => o.GroupNameFormat = "'v'VVV" );
services.AddApiVersioning(o => o.ReportApiVersions = true);
services.AddSwaggerGen(c => {
// c.SwaggerDoc("v1", new Info {
// Title = "API", Version = "v1"
// });
foreach (var description in provider.ApiVersionDescriptions)
{
c.SwaggerDoc(
description.GroupName,
new Info()
{
Title = $"API",
Version = description.ApiVersion.ToString()
});
}
c.OperationFilter<SwaggerDefaultValues>();
});
Настройка запуска
app.UseSwagger(c => {
c.RouteTemplate = "{documentName}/configuration.json";
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/v1/configuration.json", "API");
c.RoutePrefix = "v1/docs";
foreach (var description in apiProvider.ApiVersionDescriptions)
{
c.SwaggerEndpoint($"/{description.GroupName}/configuration.json", description.GroupName.ToUpperInvariant());
}
})
контроллер
//[Route("v1/[controller]")]
[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[ApiVersion("1.0")]
public class SomeController : ControllerBase {}
1 ответ
Это, вероятно, потому что вы закомментировали .AddApiExplorer()
и у вас нет звонка .AddMvc()
, Призыв к .AddMvcCore()
не звонит .AddApiExplorer()
и не делает .AddVersionedApiExplorer()
(который будет изменен в v3.0, чтобы избежать такого рода проблем). Призыв к .AddMvc()
как показано в примерах .AddApiExplorer()
косвенно. Это, вероятно, причина, и вам просто нужно принести .AddApiExplorer()
обратно в складку.
Кроме того, есть ли конкретная причина, по которой вы настраиваете:
c.SwaggerEndpoint("/v1/configuration.json", "API");
c.RoutePrefix = "v1/docs";
Не уверен, влияет ли это на это, но в этом нет необходимости.
Вы установили точки останова внутри:
services.AddSwaggerGen(c => { … })
А также
app.UseSwaggerUI(c => { … })
В AddSwaggerGen
, вы должны увидеть хотя бы одно описание API. В UseSwaggerUI
надо посмотреть хотя бы 1.0
, Не понятно, сколько у вас версий на данный момент.