В IIS7.5 какой модуль удаляет тело 400 Bad Request - PullRequest
18 голосов
/ 22 октября 2010

Я написал код ASP.NET (4.0), который устанавливает значение Response.StatusCode равным 400, если данные, отправленные на сервер, являются действительными.
Я помещаю полезную информацию в тело ответа в формате, который запрашивает заголовок. например, html-сообщение о том, что «поле даты обязательно ...».

В IIS7 (7.5.7600) в Windows 7 я получаю верный HTML-ответ обратно в браузер.

В IIS7 (7.5.6000) в Windows 2008 я не получаю обратно тело html, а только текстовое тело с «Bad Request» в качестве содержимого.

Может кто-нибудь указать мне, как я изменяю конфигурацию сервера 2008, чтобы вернуть тело.
Или есть разница между этими версиями IIS?
Может быть, модуль в Machine.config?
Например, я знаю (и должен был обойти), что модуль FormsAuthentication меняет 401 на 302, даже если вы этого не хотите. Может быть, есть модуль, который останавливает содержимое отправляемого 400.

ТИА.

Ответы [ 2 ]

36 голосов
/ 27 октября 2010

Решение: отредактировал раздел web.config system.webServer и установил для атрибута httpErrors существующиеResponse значение "PassThrough" и вуаля исправлено.
т.е.:
1. классическое поведение CustomErrors, потому что я сравнивал localhost с удаленным сервером
2. первое не объясняет, как некоторые из моих «ошибок» аутентификации проходили без изменений

Iпокопался и наткнулся на эту статью на IIS7: Как использовать подробные ошибки HTTP в IIS 7.0

Это не полностью относится к тому, что я обнаружил при редактировании web.config, возможно, из-за меняиспользуя IIS7.5, но этого было достаточно, чтобы вывести меня в нужное окружение.

** Также имейте в виду, что с IIS 10, теперь поддерживающим HTTP2, описания состояния, которые содержат текст, больше не поддерживаются при обновлении запроса до HTTP2, поэтомуВы отвечаете 400 (Плохой запрос), это будет разделено только до числа 400.« HTTP / 2 не определяет способ переноса версии или фразы причины, включенной в строку состояния HTTP / 1.1. »

11 голосов
/ 28 июня 2012

Если изменение web.config не вариант, ниже может помочь:

Response.TrySkipIisCustomErrors = true;
...