【问题标题】:Generate swagger.json from code with Swashbuckle V5使用 Swashbuckle V5 从代码生成 swagger.json
【发布时间】: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 来做到这一点?

【问题讨论】:

    标签: api asp.net-core swagger swashbuckle 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2017-01-29
      • 2021-04-13
      • 1970-01-01
      相关资源
      最近更新 更多