Подтвердить что ты не робот

В IIS7.5 какой модуль удаляет тело 400 Bad Request

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

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

В IIS7 (7.5.6000) в Windows 2008 я не возвращаю тело html назад, но только текстовое тело с "плохим запросом" в качестве содержимого.

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

ТИА.

4b9b3361

Ответ 1

Решение: отредактировал раздел web.config system.webServer и установил атрибут HTTPErrors existingResponse в значение "PassThrough" et voilá.
то есть:

<system.webServer>
    ...
    <httpErrors existingResponse="PassThrough"></httpErrors>
    ...
</system.webServer>

Ну, 2 вещи заставили меня задуматься над этой проблемой:
1. классическое поведение CustomErrors, потому что я сравнивал localhost с удаленным сервером
2. первый не будет объяснять, как некоторые из моих других "ошибок" аутентификации проходили без изменений

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

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

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

Ответ 2

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

Response.TrySkipIisCustomErrors = true;