在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中的要求來匹配此行爲。