Ядро ASP.NET: NSwag против Swashbuckle

в настоящее время мы используем 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 находится в главной ветви.


person clemensoe    schedule 10.03.2021    source источник


Ответы (1)


Это решило это.

services.AddSwaggerGen(options =>
{
    options.UseAllOfForInheritance();
person clemensoe    schedule 10.03.2021