如果我升级到 5.0.0-rc4 以上,C# Swagger/Swashbuckle 架构为空

JMn*_*Tup 1 c# swagger swashbuckle swashbuckle.aspnetcore

我可以提供更多详细信息,但不确定什么有用,因此如果需要,我会回复更具体的信息。

我有一个 .NET Core 3.1 项目,它使用 Swashbuckle 提供 Swagger UI。它开始使用 Swashbuckle.AspNetCore NuGet 包版本 5.0.0-rc4,一切正常。

我有一个采用 Contract 对象的控制器方法:

public async Task<IActionResult> Import([FromBody] Contract contract) {
Run Code Online (Sandbox Code Playgroud)

这只是一个非常基础的课程(我在故障排除时剥离了所有内容),基本上只是:

public class Contract {
    /// <summary>
    /// Optional, summary
    /// </summary>
    public DateTime contractExpirationDate;
    public DateTime date;
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,Swagger UI 在 Schemas 部分中显示了 Contract 及其所有详细信息,并且它显示在控制器部分中,并且试用正确地从填写的示例结构开始,等等。

一切都很棒...直到我尝试进一步更新 Swashbuckle.AspNetCore...一旦我达到 5.0.0-rc5 ,或者转到 5.0.0,或者一直到最新版本(当前为 5.4) .1),我立即遇到了以下问题。

基本上,发生的情况是,Swagger 仍然运行,并且一切看起来都很好,但 Contract 架构现在显示为简单的 {}。它将 Contract 视为架构,但它是空的,并且控制器 Try it 示例没有示例(它只有 {} 作为请求正文)等。如果我只是将 Swashbuckle.AspNetCore 更新回 5.0 .0-rc4 并立即重新运行它,它又可以工作了。

我确信我错过了一些明显的更改/更新,我需要进行这些更改/更新才能超越 5.0.0-rc4 ,但我花了相当长的时间试图弄清楚它是什么,但我却一片空白。我的代码似乎与 Microsoft 网站上的所有示例相匹配,因此我不确定我缺少什么。

Ada*_*dam 6

5.0.0-rc4 之后困扰您的问题是从 Newtonsoft 作为 JSON 库切换到System.Text.Json,这在公共字段上的行为有所不同。

两种修复方法:

1)在类的字段上添加一个 getter 和一个 setterSystem.Text.Json并将其拾取:

public class Contract {
    public DateTime contractExpirationDate { get; set; }
    public DateTime date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

2)Swashbuckle.AspNetCore.Newtonsoft通过将以下内容添加到您的服务注册中,安装 JSON 库并将其恢复回 Newtonsoft:

services.AddSwaggerGenNewtonsoftSupport();
Run Code Online (Sandbox Code Playgroud)