api - 使用 Swashbuckle V5 从代码生成 swagger.json
问题描述
我正在使用 Swashbuckle AspNetCore v4.xx 并升级到 v5.1.xx 但是我使用的代码不再工作了,因为缺少“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 来做到这一点?
解决方案
使用 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();
}
}
OpenApiJsonWriter
如果您想要OpenApiYamlWriter
YAML 招摇合同,您可以使用。
如果你想要 V2 swagger 合约,你可以切换SerializeAsV3
到。SerializeAsV2
推荐阅读
- ef-core-2.1 - DbContext.Query 上的 EF Core 2.1 InvalidCastException
() - linux - 什么时候使用作家首选的读写器锁?
- javascript - 大小应该始终保持不变
- python-3.x - PyPDF2 不打印 pdf 文件版本 1.4 及更低版本
- javascript - 去抖动功能的开玩笑单元测试
- java - 如何将对象转换为地图?
- javascript - 与砌体重叠的图像
- xcode - Xcode 10:块压缩有效负载操作失败
- .net - 将 .NET SecureString 传递给 COM 互操作
- bash - Bash 调试陷阱使用 extdebug 保留自定义退出值