в настоящее время мы используем Swashbuckle.AspNetCore для целей документации API, но когда дело доходит до создания клиентских моделей (Typescript), кажется, что это имеет серьезный недостаток.
В качестве примера я улучшил известный проект по умолчанию ASP.NET (WeatherForecast) базовым классом.
public class InfoEntryBase
{
public string Name { get; set; }
public string Description { get; set; }
}
public class WeatherForecast : InfoEntryBase
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string Summary { get; set; }
}
Затем он предоставляет WeatherForecast как
WeatherForecast{
name string
nullable: true
description string
nullable: true
date string($date-time)
temperatureC integer($int32)
temperatureF integer($int32)
readOnly: true
summary string
nullable: true
}
и наследство теряется. Это сделает невозможным автоматическое создание клиентских моделей из серверного кода, поскольку нам, естественно, нравится переносить наследование в код Typescript.
Изучая NSwag.AspNetCore, я обнаружил, что он заботится о наследовании. Он раскрывает:
WeatherForecast{
name string
description string
date* string($date-time)
temperatureC* integer($int32)
temperatureF* integer($int32)
summary string
}
InfoEntryBase{
name string
description string
}
Я что-то упустил из-за Swashbuckle или нет альтернативы переключению с него на NSwag?
Вы можете просмотреть код на https://github.com/ClemensOesterle/NSwagSpike/tree/swashbuckle, тогда как реализация NSwag находится в главной ветви.