Проблема с отображением HttpHandler -> Ошибка HTTP 404 не найдена - PullRequest
32 голосов
/ 18 мая 2010

У меня возникают проблемы при попытке отобразить HttpHandler в web.config.

Это соответствующий бит конфигурации:

<httpHandlers>
  <add verb="*" path="*.hndlr" type="MyAssembly.MyHandler, MyAssembly" validate="false" />
</httpHandlers>

При переходе на http://localhost/myApp/whatever.hndlr я получаю сообщение об ошибке сервера 404 (не найдено).

Это первый раз, когда я подключаю HttpHandler, поэтому я могу что-то упустить - любая помощь приветствуется!

UPDATE

Мне удалось заставить его работать, используя оба ответа - кто может объяснить, почему это работает, помечает ответ!

Это мой конфиг (не будет работать, если у меня нет обоих - я запускаю IIS7 в классическом режиме )

system.web:

<httpHandlers>
    <add verb="*" path="*MyHandler.hndlr" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false"/>
</httpHandlers>

system.webServer:

<handlers>
    <add name="MyHandler" verb="*" path="*MyHandler.hndlr" type="MyAssembly.MyAssemblyHandler, MyAssembly" validate="false" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script"/>
</handlers>

Ответы [ 7 ]

28 голосов
/ 18 мая 2010

Используете ли вы IIS7, если это так, пул приложений работает в классическом или конвейерном режиме? Если это IIS7 в конвейерном режиме, то ссылка на обработчик должна перейти в следующий раздел

<system.webServer>
    <handlers>
    </handlers>
<system.webServer>

, а не в следующем разделе.

<system.web>
    <httpHandlers>
    </httpHandlers>
</system.web>
9 голосов
/ 09 марта 2011

Так же, как руководство для тех, кто застрял с этой проблемой, я обнаружил, что ключевым атрибутом является ..

resourceType="Unspecified"

Первоначально я следовал примеру Microsoft, чтобы настроить это, и они имели это как

resourceType="File"

, который только что давал мне 404 ошибки. Мой HTTPHandler возвращает графику.

Надеюсь, это поможет:)

5 голосов
/ 23 января 2013

Я использую 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>
4 голосов
/ 18 мая 2010

Каково расширение вашего обработчика? Если вы используете пользовательское расширение, такое как .hndlr , вам также может понадобиться добавить ScriptMap в IIS и указать его для среды выполнения ASP.NET, чтобы IIS мог переслать запрос правильный процессор.


  1. В IIS7 перейдите на ваш сайт
  2. В группе IIS перейдите к Отображения обработчика
  3. Под Действия Нажмите Добавить карту сценариев
  4. Установить путь запроса к * .hndlr
  5. Установите путь к среде выполнения ASP.NET (% windir% \ Microsoft.NET \ Framework64 \ v2.0.50727 \ aspnet_isapi.dll) или к любой версии, которую вы используете.

Тогда в вашем web.config вам нужно будет зарегистрировать обработчик в соответствующем разделе, как описано в другом ответе.

2 голосов
/ 30 июля 2014

Также возможно возникновение этой ошибки, если вы установили обработчик для 32-битного, но вы работаете в 64-битном (или наоборот). Легко настроить оба и покрыть все основы.

Обратите внимание на различия "preCondition" и "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>
1 голос
/ 08 августа 2017

Ни один из предыдущих ответов не работал для меня.
Я использую 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");

Я получил его, чтобы игнорировать запросы, предназначенные для моего обработчика.
Надеюсь, это кому-нибудь поможет - я рвал на себе волосы!

0 голосов
/ 22 января 2014

Надеюсь, мое решение поможет другим. При переходе сервера с IIS6 на 7.5, оба .Net 4.0 Integrated, у меня был элемент управления Captcha, который не работал Оказывается, удаление этого атрибута preCondition="integratedMode,runtimeVersionv2.0" из узла <add> в <system.webserver><handlers> решило проблему.

...