【问题标题】:Versioned API with Swagger not detecting API operations带有 Swagger 的版本化 API 未检测 API 操作
【发布时间】:2018-12-14 06:30:16
【问题描述】:

我实现了一个 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] 没有

我同时关注了samplesdocumentation,但我无法显示我的操作... 我在这里缺少什么?

启动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>();
});

*SwaggerDefaultValues.cs

启动配置

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 {}

【问题讨论】:

    标签: asp.net-core swashbuckle api-versioning


    【解决方案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。目前尚不清楚您有多少个版本。

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 2017-06-07
      • 2018-11-13
      • 2017-04-01
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      相关资源
      最近更新 更多