Swashbuckle.AspNet.Core:Swagger UI 显示空白页面 - 如何修复?

Swashbuckle.AspNet.Core: Swagger UI shows empty page - How to fix?

我将 Swashbuckle.AspNet.Core 添加到我的存储库并使用默认值初始化了所有内容。

虽然我可以看到 /swagger/v1/swagger.json 打开 /swagger/index.html 的 JSON 输出只是产生一个空白页。

为什么?




这是我的代码

public void ConfigureServices(IServiceCollection services)
{
  services
    .AddSwaggerGen()
    .AddControllers()
    ;
}

// This method gets called by the runtime once. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, Options options)
{
  if (env.IsDevelopment()) app.UseDeveloperExceptionPage();

  app
    .UseHttpsRedirection()
    .UseRouting()
    .UseAuthorization()
    .UseEndpoints(endpoints => endpoints.MapControllers())
    .UseSwagger()
    ;

  if (env.IsDevelopment()) app.UseSwaggerUI();
}

您没有正确配置 Swashbuckle 服务。

在您的 configureServices 方法中,对 AddSwaggerGen 的调用具有“可选参数”,因此您指定的方式将起作用,但执行以下操作更为常见:

  services.AddSwaggerGen(config =>
  {
    config.SwaggerDoc("v1", new OpenApiInfo() { Title = "Payment Card Info API", Version = "v1" });
  });

Title 是您的 Swagger Doc 将显示的标题,version 是您文档上显示的 API 的广告版本,第一个“v1”参数是将在用于服务器 json 文件的实际 swagger URL。

然而,您在“配置”方法中放置的代码不是可选的,必须以特定方式完成。

app.UseSwagger();
app.UseSwaggerUI(config =>
{
  config.SwaggerEndpoint("/swagger/v1/swagger.json", "Payment Card Info API");
});

必须手动配置“UseSwaggerUI 调用,因为看起来代码中的默认值根本不会自动工作。

默认情况下,您的 swagger json 文档将始终位于“/swagger/”+ swaggerDoc 调用中的第一个版本参数 + "/swagger.json"(这个可以改,但我不推荐)

您的 swagger 端点调用必须是 URL json 服务的实际地址以及您选择的名称来标记它。

我还强烈建议将你的 UseSwaggerUI 调用包装在“env.IsDevelopment”调用中,这样当你对你的应用程序进行生产构建时它会自动关闭,因此一旦你的服务就不会使其可用已部署。

这是我的做法。