L'utilisation Swashbuckle.AspNetCore dans un ASP.NET de base webapp, nous avons des types de réponse comme:Swashbuckle: Faire des propriétés non-nullables nécessaire
public class DateRange
{
[JsonConverter(typeof(IsoDateConverter))]
public DateTime StartDate {get; set;}
[JsonConverter(typeof(IsoDateConverter))]
public DateTime EndDate {get; set;}
}
Lorsque vous utilisez Swashbuckle pour émettre l'API JSON fanfaronnades, cela devient:
{ ...
"DateRange": {
"type": "object",
"properties": {
"startDate": {
"format": "date-time",
"type": "string"
},
"endDate": {
"format": "date-time",
"type": "string"
}
}
}
...
}
Le problème ici est que DateTime
est un type de valeur, et ne peut jamais être nul; mais l'API Swagger JSON émise ne marque pas les 2 propriétés en tant que required
. Ce comportement est le même pour tous les autres types de valeurs: int, long, byte, etc - ils sont tous considérés comme optionnels.
Pour compléter l'image, nous fournissons notre Swagger API JSON à dtsgenerator pour générer des interfaces de type dactylographié pour le schéma de réponse JSON. par exemple. la classe ci-dessus devient:
export interface DateRange {
startDate?: string; // date-time
endDate?: string; // date-time
}
Ce qui est manifestement erronée. Après avoir creusé cela un peu, j'ai conclu que dtsgenerator fait ce qui est juste en rendant les propriétés non-obligatoires nullables en tapuscrit. Peut-être que la spécification swagger nécessite un support explicite pour nullable vs requis, mais pour l'instant les 2 sont confondus. Je suis conscient que je peux ajouter un attribut [Required]
à chaque propriété de type valeur, mais il couvre plusieurs projets et des centaines de classes, est redondant et doit être conservé. Toutes les propriétés de type de valeur non nullable ne peuvent pas être nulles, il semble donc incorrect de les représenter comme facultatives.
L'API Web, Entity Framework et Json.net comprennent tous que les propriétés de type de valeur ne peuvent pas être null
; un attribut [Required]
n'est donc pas nécessaire lors de l'utilisation de ces bibliothèques.
Je suis à la recherche d'un moyen de marquer automatiquement tous les types de valeur non-NULL comme requis dans mon Jagger Swagger pour correspondre à ce comportement.