2015-09-11 9 views
5

Występuje problem, w którym próbuję określić, która ValidationAttribute zwróciła określony błąd ModelError. Mam punkt końcowy w moim interfejsie API, który przyjmuje model taki jak;Jak określić, która funkcja sprawdzania poprawności zwróciła błąd ModelError

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

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

i filtr w celu sprawdzenia, czy ModelState jest ważny;

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

Widzę, że ModelError ma dwie właściwości; Komunikat o błędzie, który jest typu ciąg, i wyjątek, który jest typu wyjątek. Chciałbym mocno napisany sposób określić, który ValidationAttribute [Wymagany] lub [Range (0, 3)] zwrócił odpowiedź błędu bez wykonywania manipulacji ciągami. Czy istnieje sposób na zwrócenie niestandardowej właściwości za pomocą tych atrybutów, których nie znam?

Jeśli klient miał zakładać model taki jak

{ 
    "NumberTwo":10 
} 

Ostatecznym celem byłoby produkować odpowiedzi z interfejsu API, takie jak następujące;

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

Odpowiedz

0

Jest to możliwe, jeśli piszesz własną procedurę sprawdzania poprawności zamiast używać wbudowanej w MVC. Będziesz musiał użyć refleksji nad każdą właściwością, a następnie nad każdym atrybutem sprawdzania poprawności dla każdej właściwości.

Powiązane problemy