2013-08-14 11 views
8

w mojej aplikacji ASP.NET MVC API, mogę powrócić pomocnego ErrorResponse jeśli kilka z moich Required dziedzinach brakuje:Wracając odpowiedź o błędzie w przypadku zerowej modelu

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); 

-

"Message": "The request is invalid.", 
     "ModelState": { 
      "myModel.FooA": [ 
       "The FooA is required." 
      ], 
      "myModel.FooC": [ 
       "The FooC property is required." 
      ], 
      "myModel.FooD": [ 
       "The FooD property is required." 
      ] 
     } 

jednak jak this answer potwierdza modelu NULL będzie zatwierdź. Jak nie pozwalam na to, w jaki sposób mogę zwrócić równie pomocną odpowiedź o błędzie, podając wartości, które są wymagane? Wiem, że mogę ręcznie dodać wyjątek ModelError dla każdej właściwości, ale podejrzewam, że może to być sposób, który może zrobić dla mnie CreateErrorResponse.

+0

Witam @ Jonathan. Powyższe odwołanie ma sprawdzenie, czy model nie jest pusty. Jeśli ma wartość NULL, możesz sprawdzić poniżej sugestię. –

+0

Czy można wywołać 'Controller.ValidateModel (new MyClass())' jeśli obiekt ma wartość NULL? (nb, 'ValidateModel' jest metodą w klasie' Controller'). zobacz http://stackoverflow.com/questions/6360087/manually-invoking-modelstate-validation – wal

+0

nie ma automatycznego sposobu na osiągnięcie tego, co chcesz. potrzebujesz niestandardowego spoiwa modelowego –

Odpowiedz

3

Czy używasz mvc3 lub web-api? Twoje tagi wskazują, że używasz mvc, ale twoje pierwsze zdanie oznacza web-api. W przypadku korzystania mvc3 można użyć następujących:

W kontrolerze przed wywołaniem ModelState.IsValid dodać:

if (modelObj == null) 
{ 
    ModelState.Clear(); 
    var blankModel = new MyClass(); 
    TryValidateModel(blankModel); 
    return View("About", blankModel);   
} 

Jeśli używasz web-api i zakładając używasz System.ComponentModel.DataAnnotations ci można użyć następującego:

ModelState.Clear(); 

var model = new MyClass(); 
var results = new List<ValidationResult>(); 
Validator.TryValidateObject(model, new ValidationContext(model, null, null), 
                   results, true); 

var modelState = new ModelStateDictionary(); 
foreach (var validationResult in results) 
    modelState.AddModelError(validationResult.MemberNames.ToArray()[0], 
               validationResult.ErrorMessage); 

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelState); 
+0

+1 dla "TryValidateModel" –

Powiązane problemy