Як ось це, наприклад:
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);
}
}
Це призведе до такої відповіді (якщо припустити JSON, але основний принцип для 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."]
Звичайно, ви можете сконструювати об'єкт / список помилок будь-яким способом, наприклад, додавши імена полів, ідентифікатори поля тощо.
Навіть якщо це "односторонній" виклик Ajax, як POST нового об'єкта, ви все одно повинні повернути абоненту щось - те, що вказує на те, чи був запит успішним. Уявіть собі сайт, де ваш користувач додасть інформацію про себе через запит AJAX POST. Що робити, якщо інформація, яку вони намагалися ввести, не є дійсною - як вони дізнаються, чи вдалося їх зберегти чи ні?
Найкращий спосіб зробити це - використання добрих старих кодів статусу HTTP, подібних 200 OK
тощо. Таким чином, ваш JavaScript може правильно впоратися з помилками, використовуючи правильні зворотні дзвінки (помилка, успіх тощо).
Ось хороший підручник щодо більш вдосконаленої версії цього методу, використовуючи ActionFilter та jQuery: http://asp.net/web-api/videos/getting-started/custom-validation
System.Net.Http
,System.Net
System.Web.Http.Controllers
іSystem.Web.Http.Filters
.