2013-12-20 2 views
0

Скажем, я хотел вернуть 403. Что из следующего лучше?Вам нужно установить и Response.Status и Response.StatusCode в .NET?

Response.StatusCode = 403; 
Response.Status = "Forbidden"; 

или

Response.StatusCode = 403; 

Почему именно там отдельная строка состояния в StatusCode? Какое влияние имеет его установка? Что произойдет, если вы установите что-то совершенно неправильное, например. StatusCode = 403, Status = "OK"?

ответ

1

Как утверждает Гуффа в своем ответе, задайте только описание, если вы не хотите использовать W3C-defined defaults.

В большинстве случаев это не имеет видимого эффекта для большинства пользователей. Описание, как правило, просто игнорируется, и только для кодов ошибок 4xx и 5xx, когда-либо отображаемых пользовательским агентом, в случае отсутствия тела, указанного либо с ответом. Он появляется в журналах и консолях разработчика в браузерах, поэтому он не похож на полностью скрытый.

Иногда бывает полезно сделать ошибки более подробными. Например, текст по умолчанию для 403 - Forbidden, но это нормально, чтобы установить его на 403 Invalid user domain, если это так - это может сделать процесс отладки более удобным в один прекрасный день или помочь отделу поддержки. Особенно для типичных ошибок, таких как 500, часто бывает лучше дать немного больше информации, хотя этого недостаточно, чтобы быть угрозой безопасности. Кроме того, если у вас есть дополнительная информация о проблеме, это должно быть объяснено полностью в теле, а не в описании статуса HTTP.

Наконец, чтобы ответить на последний вопрос - если вы пришлете ответ 403 OK, ничего не сгорит, ничто не взорвется, и ни один браузер не выйдет из строя. Вы можете только безнадежно путать пользователя, который видит сообщение, что просто глупо, что нужно делать, как бросать SQLException нарочно, когда у вас проблема с дисковым пространством. Браузер только смотрит на 403 и обрабатывает его, но пользователь не будет благодарным клиентом.

3

Не используйте имущество Status, оно устарело в пользу StatusDescription.

Установите свойство StatusCode и задайте только свойство StatusDescription, если вам нужно другое описание, отличное от того, которое ассоциируется с этим кодом состояния.

1

я бы вернуть что-то вроде этого:

Request.CreateResponse(HttpStatusCode.OK) 

Это лучше использовать константы HttpStatusCode.

В любом случае, вы всегда можете вручную установить StatusCode и Status для создания собственных кодов и описаний.

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