Comme ceci, par exemple:
public HttpResponseMessage Post(Person person)
{
if (ModelState.IsValid)
{
PersonDB.Add(person);
return Request.CreateResponse(HttpStatusCode.Created, person);
}
else
{
// the code below should probably be refactored into a GetModelErrors
// method on your BaseApiController or something like that
var errors = new List<string>();
foreach (var state in ModelState)
{
foreach (var error in state.Value.Errors)
{
errors.Add(error.ErrorMessage);
}
}
return Request.CreateResponse(HttpStatusCode.Forbidden, errors);
}
}
Cela renverra une réponse comme celle-ci (en supposant JSON, mais même principe de base pour XML):
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
(some headers removed here)
["A value is required.","The field First is required.","Some custom errorm essage."]
Vous pouvez bien sûr construire votre objet / liste d'erreur comme vous le souhaitez, par exemple en ajoutant des noms de champ, des identifiants de champ, etc.
Même s'il s'agit d'un appel Ajax "à sens unique" comme un POST d'une nouvelle entité, vous devez quand même renvoyer quelque chose à l'appelant - quelque chose qui indique si la demande a réussi ou non. Imaginez un site où votre utilisateur ajoutera des informations sur lui-même via une requête AJAX POST. Que faire si les informations qu'ils ont essayé de saisir ne sont pas valides - comment sauront-ils si leur action Enregistrer a réussi ou non?
La meilleure façon de le faire est d'utiliser de bons vieux codes d'état HTTP comme 200 OK
et ainsi de suite. De cette façon, votre JavaScript peut gérer correctement les échecs en utilisant les bons rappels (erreur, succès, etc.).
Voici un joli tutoriel sur une version plus avancée de cette méthode, utilisant un ActionFilter et jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
System.Net.Http
,System.Net
System.Web.Http.Controllers
etSystem.Web.Http.Filters
.