我最近将一个 ASP.NET Core API 应用程序升级到了与 ASP.NET Core 3.1 兼容的 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"
}
不是Model属性名称 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";
});
我知道如果我使用JsonPropertyName
属性来自System.Text.Json
,问题就会得到解决,但是目前我需要坚持使用原始属性。
在Start.cs中是否有设置可以告诉SwaggerUI使用Newtonsoft的JsonProperty属性?还是说我需要更改ASP.NET Core的配置级别的一些东西?