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);
}
}
Ce sera le retour de ce type de réponse (en supposant que JSON, mais le même principe de base de 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."]
Bien sûr, vous pouvez construire votre erreur d'objet/de la liste de la manière que vous voulez, par exemple en ajoutant des noms de champ, le champ id etc.
Même si c'est un "one-way" appel Ajax comme un POST d'une nouvelle entité, vous devez toujours revenir à quelque chose de l'appelant - quelque chose qui indique si oui ou non la demande a été couronnée de succès. Imaginez un site où votre utilisateur d'ajouter un peu d'infos sur eux-mêmes via une requête AJAX requête POST. Que faire si les informations qu'ils ont essayé d'entré n'est pas valide - comment vont-ils savoir si leurs Économiser de l'action est réussie ou pas?
La meilleure façon de le faire est d'utiliser le Bon Vieux Codes d'État HTTP , comme 200 OK
et ainsi de suite. De cette façon, votre JavaScript peuvent gérer correctement les défaillances à l'aide de la bonne rappels (erreur, succès, etc).
Voici un bon tutoriel sur une version plus avancée de cette méthode, à l'aide d'un ActionFilter et jQuery: http://asp.net/web-api/videos/getting-started/custom-validation