Сопоставление проблем 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 мог переслать запрос правильному процессору.


  1. в IIS7 перейдите на свой сайт
  2. в группе IIS перейдите в Обработчик Отображения
  3. под действия клик Добавить Скрипт Карта
  4. установить путь запроса на *.hndlr
  5. установить путь к 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> решен вопрос.