ASP.NET Core:NSwag vs. Swashbuckle

8

我们目前正在使用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的某些内容,或者没有其他替代方案可以从Swashbuckle切换到NSwag?

您可以查看代码 https://github.com/ClemensOesterle/NSwagSpike/tree/swashbuckle 而NSwag实现则位于主分支中。

1个回答

8

问题已解决。

services.AddSwaggerGen(options =>
{
    options.UseAllOfForInheritance();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接