Pour .NET Core (et peut-être les versions antérieures), vous pouvez également créer un attribut personnalisé pour effectuer la validation de la plage afin de faciliter la réutilisation :
public class Id : ValidationAttribute
{
protected override ValidationResult IsValid(
object value,
ValidationContext validationContext)
{
return Convert.ToInt32(value) > 0 ?
ValidationResult.Success :
new ValidationResult($"{validationContext.DisplayName} must be an integer greater than 0.");
}
}
Utilisez l'attribut Id comme suit dans votre modèle :
public class MessageForUpdate
{
[Required, Id]
public int UserId { get; set; }
[Required]
public string Text { get; set; }
[Required, Id]
public int ChannelId { get; set; }
}
Lorsque l'Id est <= 0
ce message d'erreur est renvoyé :
UserId must be an integer greater than 0.
Il n'est pas nécessaire de vérifier que la valeur est inférieure à int.MaxValue (bien qu'il soit intéressant de l'indiquer dans le message), car l'API renvoie cette erreur par défaut avant d'en arriver là, même si la valeur est int.MaxValue + 1 :
The JSON value could not be converted to System.Int32