2015-08-11 1 views
1

Utilisation de l'annotation de données [Required] dans les modèles d'entrée de api Web semble que pour vérifier les types de référence instancié null:Web Api 2: [Obligatoire] pour les types de valeur?

public class MyInputModel 
{ 
    [Required] // This works! ModelState fails. 
    public CustomClass MyCustomProperty { get; set; } 
} 

Comment pouvons-nous obtenir ce travail avec des types de valeur sans l'instanciation par défaut?

public class MyInputModel 
{ 
    [Required] // This is ignored because MyDouble is defaulted to 0 
    public double MyDouble { get; set; } 
} 

est le seul moyen grâce à l'utilisation Nullable<Double>? Ne pourrions-nous pas créer un attribut de validation personnalisé?

+0

Vous pouvez toujours écrire un attribut de validation personnalisé. E.g http://www.codeproject.com/Articles/260177/Custom-Validation-Attribute-in-ASP-NET-MVC –

Répondre

1

Voici comment fonctionne l'attribut requis en interne.

override bool IsValid(object value) { 
     if (value == null) { 
      return false; 
     } 

     // only check string length if empty strings are not allowed 
     var stringValue = value as string; 
     if (stringValue != null && !AllowEmptyStrings) { 
      return stringValue.Trim().Length != 0; 
     } 

     return true; 
    } 

donc rien à voir avec la valeur 0 vous devez donc vérifier avec l'attribut Range

3

Vous pouvez utiliser l'attribut range.

[Range(0, 99)] 
public double MyDouble { get; set; } 
+1

Sauf que dans mon cas, une valeur de 0 n'est pas la même que pas de valeur. 0 est toujours valide. – davenewza

3

essayer de faire le type de valeur Nullable par exemple public double? MyDouble { get; set; }