Response.StatusCode и Internet Explorer - Показать пользовательское сообщение? - PullRequest
1 голос
/ 09 сентября 2008

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 09 сентября 2008

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

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

1 голос
/ 09 сентября 2008

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

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

1 голос
/ 09 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...