Как это, например:
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'. –
Существует также аналогичная реализация на официальной странице ASP.NET Web Api: http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web -api –
Даже если не поставить [ValidationActionFilter] над веб-api, он по-прежнему вызывает код и дает мне плохой запрос. – micronyks