Сопоставление проблем HttpHandler --> ошибка HTTP 404 не найдена
у меня возникли проблемы с попыткой сопоставить HttpHandler в интернете.конфиг.
это соответствующий бит конфигурации:
<httpHandlers>
<add verb="*" path="*.hndlr" type="MyAssembly.MyHandler, MyAssembly" validate="false" />
</httpHandlers>
когда я перейду к http://localhost/myApp/whatever.hndlr
Я получаю ошибку сервера 404 (не найден).
это первый раз, когда я подключаю HttpHandler, поэтому я могу что - то пропустить-любая помощь оценена!
обновление:
мне удалось заставить его работать, используя оба ответа до сих пор-кто может объяснить, почему это works получает ответ отмечен!
Это моя конфигурация (не будет работать, если у меня нет обоих-я бегу IIS7 в классическом режиме)
7 ответов
используете ли вы IIS7, если это так, пул приложений работает в классическом или конвейерном режиме? Если это IIS7 в конвейерном режиме, то ссылка на обработчик должна перейти в следующий раздел
<system.webServer>
<handlers>
</handlers>
<system.webServer>
, а не в следующем разделе.
<system.web>
<httpHandlers>
</httpHandlers>
</system.web>
только в качестве руководства для тех, кто застрял с этой проблемой я нашел ключевой атрибут..
resourceType="Unspecified"
Я изначально следовал примеру Microsoft, чтобы настроить это, и у них было это как
resourceType="File"
который просто продолжал давать мне ошибки 404. Мой HTTPHandler возвращает графику.
надеюсь, что это помогает :)
Я использую IIS7, решение:
в разделе
<system.web>
<httpHandlers>
<add verb="*" path="*.ashx" type="CVOS.MyDocumentHandler"/>
</httpHandlers>
<system.web>
и раздел
<system.webServer>
<handlers>
<add name="pdfHandler" verb="*" path="*.ashx" type="CVOS.MyDocumentHandler" />
</handlers>
</system.webServer>
каково расширение вашего обработчика? Если вы используете пользовательское расширение, например .hndlr вам также может потребоваться добавить сопоставление сценариев в IIS и укажите его на ASP.NET среда выполнения, чтобы IIS мог переслать запрос правильному процессору.
- в IIS7 перейдите на свой сайт
- в группе IIS перейдите в Обработчик Отображения
- под действия клик Добавить Скрипт Карта
- установить путь запроса на *.hndlr
- установить путь к ASP.NET время выполнения (%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll) или любая версия, которую вы используете.
затем в веб.config вам нужно будет зарегистрировать обработчик в соответствующем разделе, как описано в другом ответе.
эта ошибка также может возникнуть, если вы настроили обработчик для 32 бит, но вы работаете в 64 бит (или наоборот). Легко настроить оба и иметь все основания покрытыми.
обратите внимание на различия" предварительное условие "и" scriptProcessor".
<handlers>
<add name="MyHandler_32bit" verb="*" path="*MyHandler.hndlr" preCondition="bitness32" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" />
<add name="MyHandler_64bit" verb="*" path="*MyHandler.hndlr" preCondition="bitness64" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" />
</handlers>
ни один из предыдущих ответов работал для меня.
Я использую IIS 8.5, .Net v4.0, Integrated
, и все еще получал 404 со следующей конфигурацией обработчика:
<system.webServer>
<handlers>
<add name="testEmail" path="*.em" verb="*" type="MyApp.testRazorEmailHandler, MyApp" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
Я включил трассировку и нашел следующее:
116. -HANDLER_CHANGED
OldHandlerName testEmail
NewHandlerName System.Web.Mvc.MvcHandler
NewHandlerModules ManagedPipelineHandler
NewHandlerScriptProcessor
NewHandlerType System.Web.Mvc.MvcHandler, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Как вы можете видеть, похоже, что он правильно подобрал запрос, используя мой пользовательский HttpHandler testEmail
но MVC украл его.
Я открыл свои определения маршрута в RouteConfig.cs
и обнаружил, что добавление:
routes.IgnoreRoute("{resource}.em");
Я заставил его игнорировать запросы, предназначенные для моего обработчика.
Надеюсь, это кому - то поможет-я рвал на себе волосы!
надеюсь, мое решение поможет и другим. На сервере переход от IIS6 к 7.5, оба .Net 4.0 интегрированы, у меня был элемент управления Captcha, который перестал работать. Оказывается, удаление этого атрибута preCondition="integratedMode,runtimeVersionv2.0"
с <add>
узел <system.webserver><handlers>
решен вопрос.