Проверка формы и исключение HTTP

Форма отправляется с помощью подключаемого модуля формы jQuery для действия в среде MVC. В действии, если проверка формы не удалась, ответ должен быть отправлен обратно клиенту. Плагин формы jQuery поставляется с обратными вызовами ошибок и успехов (как и любые другие функции jQuery Ajax). Разве не лучше возвращать исключение HTTP с кодом ошибки 400 (неверный запрос) и перехватывать его в обратном вызове с ошибкой, чем возвращать успешный HTTP-ответ и перехватывать его в обратном вызове?

Если ответ «да», не будет ли более информативным иметь данные, прикрепленные к исключению HTTP? Из того, что я вижу прямо сейчас, HTTPException.Data доступен только для чтения. Кажется, что один из конструкторов выполняет свою работу (HttpException(SerializationInfo, StreamingContext)), но я не могу понять это. Кто-нибудь объяснит мне, как добавить данные в исключение HTTP?


person Jermin Bazazian    schedule 02.10.2012    source источник


Ответы (1)


Нет, не рекомендуется просто возвращать код ошибки, даже если вам удастся прикрепить сообщения к HTTPException.

Почему? Так вы потеряете так много информации. У вас есть возможность вернуть произвольный объект JSON, который может включать (например) список всех ошибок проверки (или любую соответствующую информацию, которая может помочь вызывающему клиенту), которую вы затем визуализируете на клиенте, чтобы пользователь может исправить.

Кроме того, вы должны учитывать, что происходит, когда ваш звонок проходит успешно. Достаточно ли кода возврата 200 для ваших целей?

person Paul Alan Taylor    schedule 02.10.2012
comment
Меня смущает код ответа Http. Поправьте меня, если я ошибаюсь, но из 200 я понимаю, что запрос успешно обработан. Я имею в виду, что если есть обратный вызов функции ошибки, не лучше ли использовать его с пользой? - person Jermin Bazazian; 02.10.2012
comment
Это не исключение HTTP, о котором вы пытаетесь сообщить. Это ошибка проверки формы. Итак, как подразумевает Пол, верните HTTP OK, но включите в свой HTTP-ответ данные, относящиеся к ошибке проверки. Посмотрите на JsonResult MVC, который наследует ActionResult. - person Tom Troughton; 02.10.2012
comment
Независимо от того, действительны ваши данные или нет, лучше, чтобы ваша конечная точка завершила успешно, вернула 200 и включила данные, которые указывают, почему проверка не удалась. - person Paul Alan Taylor; 02.10.2012
comment
@tomtroughton: Спасибо за совет, но моя проблема носит более философский характер. Не лучше ли использовать HttpException, учитывая тот факт, что обратные вызовы ошибок будут вызываться тогда и только тогда, когда произойдет исключение? - person Jermin Bazazian; 02.10.2012
comment
Я нашел это здесь. если вы хотите получить доступ к строкам и прочему, вы должны возвращать объекты JSON и не создавать никаких исключений. Вы должны выбрать, какой из двух вы хотите: либо полностью RESTFul API, в котором код состояния достаточен и позволяет вам подразумевать сообщение об ошибке, либо возвращать объекты JSON. — Дарин Димитров - person Jermin Bazazian; 02.10.2012
comment
Я чувствую, что вы неправильно понимаете смысл HttpException. Он используется для описания исключения, возникшего во время обработки HTTP-запроса. Ваш запрос обрабатывается нормально, поэтому вы должны вернуть 200 OK. Ваша форма, не прошедшая проверку, — это совершенно другой аспект. Вы бы незаконно присвоили класс HttpException. - person Tom Troughton; 02.10.2012