Недавно я обновил ASP. NET Core API-приложение до Swashbuckle / Swagger 5.0.0 с ASP. NET Core 3.1.
<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 теперь игнорирует имена атрибутов JtonsProperty Newtonsoft / JSON. NET в свойствах DTO. Например:
[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
.
Для Swagger в Startup.cs ConfigureServices у меня сейчас есть:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "My API",
});
c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"));
});
А для Swagger в Startup.cs Configure у меня сейчас есть:
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?