使用 Swashbuckle V5 从代码生成 swagger.json
Posted
技术标签:
【中文标题】使用 Swashbuckle V5 从代码生成 swagger.json【英文标题】:Generate swagger.json from code with Swashbuckle V5 【发布时间】:2020-03-20 09:25:38 【问题描述】:我使用的是 Swashbuckle AspNetCore v4.x.x,我升级到 v5.1.x.x。但是我使用的代码不再工作了,因为缺少“SwaggerContractResolver”类。
我尝试的目标是在我的 RESTfull API 的代码中生成 swagger.json:
public static string GenerateSwagger(this IWebHost webhost, string docName, string basePath)
var sw = (ISwaggerProvider)webhost.Services.GetService(typeof(ISwaggerProvider));
var doc = sw.GetSwagger(docName, null, basePath);
var json = JsonConvert.SerializeObject(
doc,
Formatting.Indented,
new JsonSerializerSettings
NullValueHandling = NullValueHandling.Ignore,
ContractResolver = new SwaggerContractResolver(new JsonSerializerSettings())
);
return json;
string json = GenerateSwagger(webhost, docName, url);
string path = Path.Combine(path, docName);
File.WriteAllText(path + ".json", json);
如何像 v4 一样使用新版本的 Swashbuckle AspnetCore 来做到这一点?
【问题讨论】:
【参考方案1】:使用 Swashbuckle V5,您可以使用 .NET Core CLI 生成 swagger 合约:
https://github.com/domaindrivendev/Swashbuckle.AspNetCore#swashbuckleaspnetcorecli
但这仅适用于 .NET Core API。对于 .NET Framework,您可以使用此方法:
public static string GenerateSwagger(this IWebHost webhost, string docName, string basePath)
var sw = webhost.Services.GetRequiredService<ISwaggerProvider>();
var doc = sw.GetSwagger(docName, null, basePath);
using (var streamWriter = new StringWriter())
var writer = new OpenApiJsonWriter(streamWriter);
doc.SerializeAsV3(writer);
return streamWriter.ToString();
如果你想要 YAML swagger 合约,你可以将 OpenApiJsonWriter
转换为 OpenApiYamlWriter
。
如果你想要 V2 swagger 合约,你可以将SerializeAsV3
切换为SerializeAsV2
。
【讨论】:
以上是关于使用 Swashbuckle V5 从代码生成 swagger.json的主要内容,如果未能解决你的问题,请参考以下文章
ABP/Swashbuckle - 使用 Swashbuckle CLI 生成 swagger 文档
Swashbuckle.AspNetCore3.0的二次封装与使用
如何使用 Swashbuckle.AspNetCore 隐藏响应代码 200?
asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档