首页 > 解决方案 > 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 实现位于主分支中。

标签: c#.netnswagswashbuckle.aspnetcore

解决方案


这解决了它。

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

推荐阅读