Может ли ASP.NET HttpHandler обрабатывать http 400 - неверный запрос? - PullRequest
9 голосов
/ 05 декабря 2008

У нас есть HttpHandler, который напрямую работает с двоичными сообщениями по HTTP из клиентского программного обеспечения. Клиентское программное обеспечение иногда отправляет данные, в результате чего IIS 7 отвечает 400 - неверный запрос. Поскольку «400 неправильных запросов» является особенным в том смысле, что HTTP.SYS прозрачно обрабатывает его в режиме ядра, не уведомляя пользовательский режим ни о чем, не возникает никаких ошибок для обработки в ASP.NET. Можно ли перехватить этот http 400 в ASP.NET, чтобы я мог записать конкретные данные в поток ответа в этих сценариях? Перенаправление на другую страницу не является вариантом, так как оно должно быть в текущем запросе / ответе.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2009

Я бы вместо этого попросил их исправить пользовательское программное обеспечение клиента. Дайте им отчет, показывающий неудавшиеся запросы. Если вы можете, запустите сниффер, например Wireshark, и отправьте им пакеты, если они не уверены, что проблема в их программном обеспечении.

2 голосов
/ 05 декабря 2008

Если вы знаете, что вызывает 400, то вы можете настроить поведение http.sys через реестр, чтобы справиться с ним:

http://support.microsoft.com/kb/820129

Однако вы должны знать, что это может привести к потенциальным последствиям для безопасности и производительности.

Другим вариантом может быть использование фильтрующего прокси перед IIS, что позволяет захватывать запрос до его дальнейшей обработки.

1 голос
/ 05 декабря 2008

Если ваш пользовательский клиент вызывает IIS для запуска HTTP 400, он, вероятно, имеет недостатки и не отправляет действительные запросы HTTP в соответствии со стандартом. Если вы можете изменить клиента, это будет правильно. В противном случае вы работаете не с HTTP, а IIS предназначен для обработки HTTP-запросов. Поэтому вам следует запустить собственный сервер для вашего собственного протокола (который является нестандартным HTTP-подобным).

Не рекомендуется использовать IIS / ASP.NET для обработки такого запроса, поскольку это может привести к непредвиденным неожиданностям.

...