Asp.net core 带Swagger的版本化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

我实现了一个API并将其与集成

启动配置服务

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
。目前还不清楚你有多少版本