Я реализую HttpRequestValidationException в моем обработчике Application_Error и, если возможно, хочу отобразить настраиваемое сообщение.
Теперь я думаю о StatusCode. В моем текущем примере он отправляет 200, что, как мне кажется, делать не следует. Я хотел бы вместо этого отправить (IMHO) более подходящий 400 Bad Request. Однако в то же время я хотел бы использовать Response.Write для ввода настраиваемого сообщения. Firefox отображает это правильно, но IE7 дает мне бесполезную страницу ошибок Internet Explorer по умолчанию.
С одной стороны, я предполагаю, что Internet Explorer просто предполагает, что все <> 200 просто не имеет никакого «хорошего» контента, и здесь RFC не совсем понятен.
Поэтому мне просто интересно, отправляет ли HTTP 200 для страницы ошибки, вызванную хорошей практикой HttpRequestValidationException, или нет? Есть ли хорошие альтернативы?
Просто добавлю: обычно Response.Redirect также будет жизнеспособным решением. Однако, если вы используете ASP.net AJAX, вы также будете перенаправлены. Server.Transfer позволяет вам оставаться на текущей странице для AJAX-запросов и обрабатывать ошибку в JavaScript. См. Мой вопрос об исключении HttpRequestValidationException.





Нет, это определенно не лучшая практика. Коды состояния 2XX означают (среди прочего), что запрос действителен. Это прямо противоположно возникновению исключения HttpRequestValidationException.
К сожалению, я не знаю, как заставить IE вести себя правильно. Немного лучше, чем отправить 200, было бы перенаправить его на страницу с ошибкой, но он все еще далек от совершенства.
Internet Explorer показывает то, что они называют «дружественным сообщением об ошибке HTTP», если ответ 4xx или 5xx. Этот параметр может быть отключен пользователем в диалоговом окне IE Tools.Options.Advanced [Browsing].
Отправка 200 за страницу с ошибкой, как правило, плохая практика. Один из альтернативных вариантов - иметь действующую страницу «Ошибка», которая называется предполагаемый, для отображения сообщений об ошибках (так что 200 будет нормально), а затем использовать перенаправление 3xx на эту страницу.
На самом деле это звучит как хорошая идея. Мне уже снятся кошмары, когда я думаю, как заставить этот механизм работать с AJAX, но я буду бороться с этим, потому что меня не устраивает мой текущий подход Response.Write (жестко запрограммированный html), поскольку отдельная ошибка. Aspx имеет другие преимущества .
Код ответа HTTP 200 не указывает на ошибку. Это говорит о том, что все в порядке. Вы не должны использовать код ответа 200 для ошибки.
Internet Explorer показывает страницу «Дружественные ошибки», если размер ответа меньше 512 байт. Подробнее по этому вопросу: http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx,
Полезно знать, поэтому одно из исправлений - увеличить ответ как минимум до 513 байт, что должно быть выполнимо.
Спасибо! Мое решение: я создал ошибку> 512 байт Error.aspx, но Global.asax установит для StatusCode значение 400, а затем выполнит Server.Transfer вместо Response.Redirect. Хорошо работает с AJAX и Internet Explorer.