Asp.net core 带Swagger的版本化API未检测到API操作
我实现了一个API并将其与集成 启动配置服务:Asp.net core 带Swagger的版本化API未检测到API操作,asp.net-core,swashbuckle,api-versioning,Asp.net Core,Swashbuckle,Api Versioning,我实现了一个API并将其与集成 启动配置服务: services .AddMvcCore() .AddApiExplorer(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "API", Version = "v1" }); }); 启动配置 app.UseSwagger(c => { c.RouteTemplate = "{d
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";
})
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]
public class SomeController : ControllerBase {}
//[Route("v1/[controller]")]
[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[ApiVersion("1.0")]
public class SomeController : ControllerBase {}
到现在为止,一直都还不错。。。
就像一个符咒。但是,我升级到最新的[Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer][2]
没有
我遵循了以及,但我不能让我的操作显示我错过了什么?
启动配置服务
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>();
});
控制器
[Route("v1/[controller]")]
[ApiController]
public class SomeController : ControllerBase {}
//[Route("v1/[controller]")]
[ApiController]
[Route("v{version:apiVersion}/[controller]")]
[ApiVersion("1.0")]
public class SomeController : ControllerBase {}
这可能是因为您已注释掉了
.AddApiExplorer()
,并且没有调用.AddMvc()
。调用.AddMvcCore()
不会调用.AddApiExplorer()
也不会调用.AddVersionedApiExplorer()
(在v3.0中会更改以避免此类问题)。对.AddMvc()
的调用(如示例中所示)会间接调用.AddApiExplorer()
。这很可能就是原因,您只需将.AddApiExplorer()
带回到文件夹中即可
此外,您进行配置是否有特定原因:
c.SwaggerEndpoint("/v1/configuration.json", "API");
c.RoutePrefix = "v1/docs";
不确定这是否会影响它,但也不必要
是否在以下内容中设置断点:
services.AddSwaggerGen(c => { … })
及
在AddSwaggerGen
中,您应该至少看到一个API描述。在UseSwaggerUI
中,您应该至少看到1.0
。目前还不清楚你有多少版本