У меня есть HttpHandler, который обрабатывает 404 ошибки, которые я реализовал несколько лет назад как способ выполнения URL-маршрутизации. Если запрос отображается на действительной странице, он перенаправляется на эту страницу. В противном случае он возвращает 404. (Я знаю, что должен начать использовать новую функцию маршрутизации asp.net 4.0, но это займет некоторое время. Мне нужно, чтобы это работало как можно скорее.)
В IIS6 я сопоставил ошибку 404 с "/404.ashx". В файле web.config настраиваемые ошибки настраиваются так:
<customErrors mode="On" defaultRedirect="error.aspx">
<error statusCode="404" redirect="/404.ashx"/>
</customErrors>
и обработчик http:
<httpHandlers>
<add verb="GET" path="404.ashx" type="myNamespace.PageNotFoundHandler,myAssemblyName"/>
</httpHandlers>
Это работает годами - оно перестало работать, как только я сменил сайт на asp.net 4.0. Все было перекомпилировано для 4.0, и никаких изменений кода не было.
Теперь, когда я нажимаю на один из этих URL-адресов, которые раньше работали, я получаю пустую страницу с кодом ошибки 404. Если я удаляю отображение ошибок IIS 404, я получаю обычную старую страницу 404. Похоже, httphandler не вызывается.
У меня есть другой обработчик http, который работает нормально.
Я установил для элемента EnableExtensionlessUrls в реестре значение 0, как предлагалось здесь и в других местах.
Я полагаю, что должен быть какой-то параметр конфигурации, который я пропустил или что-то в этом роде. Естественно, это проблема только на моем рабочем сервере, поэтому я не могу запустить его в отладчике, чтобы увидеть, что происходит. Если ничего не получится, я добавлю в систему дополнительную запись в журнал, чтобы помочь отследить ее.
Любые идеи о том, что я еще могу проверить?