So zum Beispiel:
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);
}
}
Dies gibt eine Antwort wie diese zurück (unter der Annahme von JSON, aber dem gleichen Grundprinzip für 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."]
Sie können Ihr Fehlerobjekt / Ihre Fehlerliste natürlich beliebig erstellen, z. B. Feldnamen, Feld-IDs usw. hinzufügen.
Auch wenn es sich um einen Einweg-Ajax-Aufruf wie einen POST einer neuen Entität handelt, sollten Sie dem Anrufer dennoch etwas zurückgeben - etwas, das angibt, ob die Anforderung erfolgreich war oder nicht. Stellen Sie sich eine Site vor, auf der Ihr Benutzer über eine AJAX POST-Anfrage einige Informationen über sich selbst hinzufügt. Was passiert, wenn die Informationen, die sie eingegeben haben, nicht gültig sind? Woher wissen sie, ob ihre Aktion Speichern erfolgreich war oder nicht?
Der beste Weg, dies zu tun, ist die Verwendung von guten alten HTTP-Statuscodes wie 200 OK
und so weiter. Auf diese Weise kann Ihr JavaScript Fehler mit den richtigen Rückrufen (Fehler, Erfolg usw.) ordnungsgemäß behandeln.
Hier ist ein nettes Tutorial zu einer fortgeschritteneren Version dieser Methode mit ActionFilter und jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
System.Net.Http
,System.Net
System.Web.Http.Controllers
undSystem.Web.Http.Filters
.