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

问题描述 投票:1回答:1

我正在使用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);

如何使用新版本的Swashbuckle AspnetCore像v4一样执行此操作?

api asp.net-core swagger swashbuckle swashbuckle.aspnetcore
1个回答
0
投票

使用Swashbuckle V5,您可以使用.NET Core CLI来生成大张旗鼓的合同:

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摇号合约,可以将OpenApiJsonWriter改为OpenApiYamlWriter

如果您想让V2摇摇欲坠,可以将SerializeAsV3切换为SerializeAsV2

© www.soinside.com 2019 - 2024. All rights reserved.