2

私は 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 を使用します。

4

1 に答える 1

4

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();
    }
}

OpenApiJsonWriterYAML swagger 契約が必要なOpenApiYamlWriter場合は、切り替えることができます。

V2 swagger 契約が必要な場合は、に切り替えることができSerializeAsV3ます。SerializeAsV2

于 2020-05-20T16:04:40.703 に答える