【问题标题】:SwaggerUI 5.0.0 ignoring JsonProperty nameSwaggerUI 5.0.0 忽略 JsonProperty 名称
【发布时间】:2020-02-17 05:15:57
【问题描述】:

我最近使用 ASP.NET Core 3.1 将 ASP.NET Core API 应用程序升级到 Swashbuckle/Swagger 5.0.0。

<PackageReference Include="Swashbuckle.AspNetCore" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="5.0.0" />

但是,这样做后,我注意到 Swagger UI 现在忽略了 DTO 属性上的 Newtonsoft/JSON.NET JsonProperty 属性名称。例如:

[HttpGet("testget", Name = "testget")]
[ProducesResponseType(StatusCodes.Status200OK)]
public ActionResult<TestGetResponse> TestGet()
{
    var response = new TestGetResponse { MyName = "John" };

    return Ok(response);
}

public class TestGetResponse
{
    [JsonProperty("name")]
    public string MyName { get; set; }
}

在 Swagger UI 中输出为:

代码 200: 示例值

Model
{
  "myName": "string"
}

而不是模型属性名称name

对于我目前拥有的 Startup.cs ConfigureServices 中的 Swagger:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "My API",
    });

    c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"));
});

对于 Startup.cs 配置中的 Swagger,我目前拥有:

app.UseSwagger();

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API");
    c.RoutePrefix = "swagger";
});

我知道,如果我使用 System.Text.Json 属性 JsonPropertyName 代替,这将得到修复,但我现在需要坚持使用原始属性。

Start.cs 中是否有设置告诉 SwaggerUI 使用 Newtonsoft JsonProperty 属性,或者我需要在 ASP.NET Core 配置级别进行更改?

【问题讨论】:

    标签: json.net swagger asp.net-core-3.1 system.text.json


    【解决方案1】:

    似乎从 Swashbuckle/Swagger 版本 5.0.0 开始对 NewtonSoft JSON.net 的完全支持是通过单独的包提供的。

    要让它工作:

    1) 安装nuget包Swashbuckle.AspNetCore.Newtonsoft 5.0.0+版本

    2) 在 Startup.ConfigureServices() 中调用支持:

    services.AddSwaggerGenNewtonsoftSupport();

    更多信息可以在here找到。

    【讨论】:

    • 我认为虽然这个解释比较老,但我已经尝试过了,但仍然没有成功。我正在运行 5.5.1 版的招摇包。有人对此有进一步的说明吗?
    • 我在使用 Asp.Net Core 3.1 和 NSwag Nuget 包时遇到了同样的问题。当我从 Postman 尝试时,一切都很好,但是从 Swagger UI 中,它在请求中传递占位符而不是参数值,并且它无法识别查询字符串参数中的 JsonProperty("MyName")。
    • 之前发现的问题:确保您没有从您的Startup.cs 的任何地方呼叫IMvcBuilder.AddNewtonsoftJson();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2017-02-15
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多