2008-09-08 4 views
1

Я реализую исключение HttpRequestValidationException в обработчике Application_Error и, если возможно, хочу отобразить собственное сообщение.Response.StatusCode и Internet Explorer - отображение пользовательского сообщения?

Теперь я думаю о StatusCode. В моем текущем примере он отправляет 200, которые, я думаю, не следует делать. Я хотел бы отправить (IMHO) более подходящий 400 Bad Request вместо этого. Однако в то же время я хотел бы использовать Response.Write для ввода пользовательского сообщения. Firefox отображает его правильно, но IE7 дает мне бесполезную страницу ошибок Internet Explorer по умолчанию.

С одной стороны, я думаю, что Internet Explorer просто предполагает, что все <> 200 просто не имеет никакого «хорошего» контента и RFC is not really clear здесь.

Так что я просто удивляюсь, отправляет HTTP 200 на страницу с ошибкой, вызванную хорошей практикой HttpRequestValidationException или нет? Есть ли хорошие альтернативы?

+0

Спасибо! Мое решение: я создал> 512 байт Error.aspx, но Global.asax установит StatusCode на 400, а затем сделает Server.Transfer вместо Response.Redirect. Хорошо работает с AJAX и Internet Explorer. – 2008-09-08 22:27:03

+0

Просто добавьте: Обычно Response.Redirect также будет жизнеспособным решением. Однако, если вы используете ASP.net AJAX, вы также будете перенаправлены. Server.Transfer позволяет вам оставаться на текущей странице для AJAX-запросов и обрабатывать ошибку в JavaScript. См. Мой вопрос HttpRequestValidationException. – 2008-09-09 08:27:23

ответ

4

Код ответа HTTP 200 не указывает на ошибку. Это указывает на то, что все в порядке. Вы не должны использовать код ответа 200 для ошибки.

Internet Explorer показывает свою страницу «Friendly Errors», если ответ меньше 512 байт. Вот еще по этому вопросу: http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx,

1

Нет, это, конечно, не очень хорошая практика. Коды состояния 2XX означают (между прочим), что запрос действителен. Это просто противоречит возведению исключения HttpRequestValidationException.

Я не знаю, как заставить IE вести себя корректно, к сожалению. Несколько лучше, чем отправить 200, было бы перенаправить его на страницу с ошибкой, но все же далека от совершенства.

1

Internet Explorer показывает, что они называют «дружественным сообщением об ошибке HTTP», когда ответ равен 4xx или 5xx. Этот параметр может быть отключен пользователем в IE Tools.Options.Advanced [Browsing].

Отправка 200 страниц с ошибкой, как правило, является плохой практикой. Один из вариантов - иметь действительную страницу «Ошибка», которая предположительно для отображения сообщений об ошибках (так что 200 будет в порядке), а затем используйте перенаправление 3xx на эту страницу.

+0

Это действительно звучит неплохо. Я уже получаю кошмары, думая, как заставить этот механизм работать с AJAX, но я буду бороться с этим, потому что я не доволен своим текущим подходом Response.Write (hardcoded html), поскольку отдельная ошибка.aspx имеет другие преимущества , – 2008-09-08 22:13:26

Смежные вопросы