Подтвердить что ты не робот

Отображение проблемы HttpHandler → Ошибка HTTP 404 не найдена

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

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

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

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

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

UPDATE

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

Это моя конфигурация (не будет работать, если у меня нет обоих - я запускаю 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>
4b9b3361

Ответ 1

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

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

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

<system.web>
    <httpHandlers>
    </httpHandlers>
</system.web>

Ответ 2

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

resourceType="Unspecified"

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

resourceType="File"

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

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

Ответ 3

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


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

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

Ответ 4

Я использую 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>

Ответ 5

Также можно испытать эту ошибку, если вы настроили обработчик для 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>

Ответ 6

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

Ответ 7

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

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