Режим CustomErrors
Это поведение IIS для обработки ответов с кодом HTTP 400.Итак, вам нужно удалить эту строку
Response.StatusCode = (int)HttpStatusCode.BadRequest;
и добавить дополнительные данные в ваш ответ.вот так:
if (ModelState.IsValid) {
return Json(new { success = true });
}
return Json(new { success = false, errors = ModelState.Values.SelectMany(v => v.Errors) });
И прочитайте это в своем JS-коде так:
$.ajax({
url: url,
method: 'POST',
success: function(data) {
if (!data.success) {
$.each(data.errors, function(i, error) {
AddValidationError(error.ErrorMessage);
});
ShowValidationErrors();
}
}
});
В вашем Web.config
вы можете найти такой раздел:
<customErrors mode="Off">
</customErrors>
mode="Off"
переписать на mode="On"
во время процесса развертывания, поэтому при производстве любые ответы с кодом 400 обрабатываются другим способом, чем при отладке.В Web.Release.config
вы можете найти, что именно переписывает в этом разделе
Обновление
Другое решение:
Response.TrySkipIisCustomErrors = true;
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(new { errors = ModelState.Values.SelectMany(v => v.Errors) });
Это остановит обработку пользовательской ошибки mode="On"
и Resposne будетсодержит ваш JSON с ошибками.