W ten sposób na przykład:
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);
}
}
To zwróci następującą odpowiedź (zakładając JSON, ale ta sama podstawowa zasada dla 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."]
Możesz oczywiście skonstruować swój obiekt / listę błędów w dowolny sposób, na przykład dodając nazwy pól, identyfikatory pól itp.
Nawet jeśli jest to „jednokierunkowe” wywołanie Ajax, takie jak POST nowej jednostki, nadal powinieneś zwrócić coś do dzwoniącego - coś, co wskazuje, czy żądanie się powiodło. Wyobraź sobie witrynę, w której użytkownik doda informacje o sobie za pośrednictwem żądania AJAX POST. Co się stanie, jeśli informacje, które próbowali wprowadzić, są nieprawidłowe - skąd będą wiedzieć, czy ich akcja zapisywania zakończyła się powodzeniem, czy nie?
Najlepszym sposobem na to jest użycie dobrych starych kodów stanu HTTP, takich jak 200 OKi tak dalej. W ten sposób Twój JavaScript może poprawnie obsługiwać awarie przy użyciu poprawnych wywołań zwrotnych (błąd, sukces itp.).
Oto fajny samouczek dotyczący bardziej zaawansowanej wersji tej metody, wykorzystującej ActionFilter i jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
System.Net.Http,System.NetSystem.Web.Http.ControllersiSystem.Web.Http.Filters.