使用Swashbuckle V5从代码中生成swagger.json



我使用的是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?

使用Swashbuckle V5,您可以使用。NET Core CLI生成swagger合同:

https://github.com/domaindrivendev/Swashbuckle.AspNetCore#swashbuckleaspnetcorecli

但这只适用于。NET核心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招摇合同,你可以将OpenApiJsonWriter切换为OpenApiYamlWriter

如果您想要V2型格合同,可以将SerializeAsV3切换为SerializeAsV2

最新更新