在ASP.NET Web应用程序的核心使用Swashbuckle.AspNetCore,我们有响应类型,如:Swashbuckle:请非空的属性需要
public class DateRange
{
[JsonConverter(typeof(IsoDateConverter))]
public DateTime StartDate {get; set;}
[JsonConverter(typeof(IsoDateConverter))]
public DateTime EndDate {get; set;}
}
当使用Swashbuckle发出招摇API JSON,这成为:
{ ...
"DateRange": {
"type": "object",
"properties": {
"startDate": {
"format": "date-time",
"type": "string"
},
"endDate": {
"format": "date-time",
"type": "string"
}
}
}
...
}
这里的问题是DateTime
是一个值类型,并且永远不能为空;但是发出的Swagger API JSON不会将这两个属性标记为required
。对于所有其他值类型,这种行为是相同的:int,long,byte等 - 它们都被认为是可选的。
要完成此图,我们正在将我们的Swagger API JSON提供给dtsgenerator以生成用于JSON响应模式的typescript接口。例如上面的类变为:
export interface DateRange {
startDate?: string; // date-time
endDate?: string; // date-time
}
这显然是不正确。在深入研究这一点之后,我已经得出结论认为dtsgenerator正在做正确的事情,使打字稿中的非必需属性可以为空。也许swagger规范需要明确支持可空对比,但现在这两个是混合的。
我知道我可以为每个值类型属性添加一个[Required]
属性,但是这涵盖了多个项目和数百个类,是冗余信息,并且必须保留。所有不可为空的值类型属性不能为null,因此将它们表示为可选项似乎不正确。
Web API,Entity Framework和Json.net都知道值类型属性不能是null
;因此使用这些库时不需要[Required]
属性。
我正在寻找一种方法来自动标记所有不可为空的值类型,如我在Swagger JSON中的要求来匹配此行为。