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”调用中,这样当你对你的应用程序进行生产构建时它会自动关闭,因此一旦你的服务就不会使其可用已部署。
这是我的做法。
我将 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”调用中,这样当你对你的应用程序进行生产构建时它会自动关闭,因此一旦你的服务就不会使其可用已部署。
这是我的做法。