2015-09-11 17 views
5

Ho un problema in cui sto cercando di determinare quale ValidationAttribute ha restituito un particolare Errore Modello. Ho un endpoint nel mio web API che accetta un modello come;Come determinare quale ValidationAttribute ha restituito un Errore Modello

public class MyClass 
{ 
    [Required] 
    [Range(0, 3)] 
    public int? Number { get; set; } 

    [Required] 
    [Range(0, 3)] 
    public int? NumberTwo { get; set; } 
} 

e un filtro per verificare che ModelState sia valido;

public class ValidateModelAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     if (!actionContext.ModelState.IsValid) 
     { 
      IEnumerable<ModelError> errors = actionContext.ModelState.Values.SelectMany(s => s.Errors); 
      // ... 
     } 
    } 
} 

Vedo che l'errore ModelError ha due proprietà; ErrorMessage che è di tipo string, e Exception che è di tipo Exception. Vorrei un metodo fortemente tipizzato per determinare quale ValidationAttribute [Required] o [Range (0, 3)] ha restituito la risposta all'errore senza eseguire la manipolazione della stringa. C'è un modo per restituire una proprietà personalizzata usando questi attributi che non ho familiarità con?

Se il cliente dovesse inviare un modello come

{ 
    "NumberTwo":10 
} 

L'obiettivo finale sarebbe quello di produrre una risposta dal API come le seguenti;

{ 
    "supportCode" : "1234567890", 
    "errors" : [{ 
     "code" : "Missing", 
     "message" : "The Number field is required." 
    }, { 
     "code" : "Invalid", 
     "message" : "The field NumberTwo must be between 0 and 3." 
    }] 
} 

risposta

0

È possibile se si scrive la propria routine di convalida invece di utilizzare quella incorporata in MVC. Dovrai utilizzare la riflessione su ogni proprietà e quindi su ciascun attributo di convalida su ciascuna proprietà.

Problemi correlati