我们目前正在使用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实现则位于主分支中。