web-dev-qa-db-ja.com

HttpHandlerのマッピングの問題-> HTTPエラー404が見つかりません

Web.configでHttpHandlerをマップしようとすると問題が発生します。

これは関連する設定ビットです:

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

http://localhost/myApp/whatever.hndlrに移動すると、サーバーエラー404(見つかりません)が表示されます。

HttpHandlerをフックするのは初めてなので、何かが足りない可能性があります。

[〜#〜]更新[〜#〜]

私はこれまでに両方の回答を使用してそれを機能させることができました-なぜそれが機能するのかを説明できる人は回答にマークを付けます!

これは私の設定です(両方がない場合は機能しません-私は実行していますクラシックモードの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>
33
JohnIdol

IIS7を使用していますか。使用している場合、アプリケーションプールはクラシックモードまたはパイプラインモードで実行されていますか?パイプラインモードのIIS7の場合、ハンドラー参照は次のセクションに移動する必要があります

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

次のセクションではなく。

<system.web>
    <httpHandlers>
    </httpHandlers>
</system.web>
28
Ben Robinson

この問題に悩まされている人たちのガイドと同じように、私は重要な属性があることを発見しました。

resourceType="Unspecified"

私はもともとこれをセットアップするためにマイクロソフトの例に従いました、そして彼らはそれを

resourceType="File"

404エラーが発生し続けました。 HTTPHandlerがグラフィックを返しています。

お役に立てれば :)

9
CResults

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

ハンドラーの拡張子は何ですか? 。hndlrのようなカスタム拡張機能を使用している場合は、ScriptMapIISで、ASP.NETランタイムを指すように指定して、IISが要求を正しいプロセッサに転送できるようにします。


  1. IIS7でWebサイトにアクセスします
  2. IISグループの下でHandler Mappingsに移動します)
  3. Actionsの下でAdd Script Mapをクリックします
  4. リクエストパスを* .hndlrに設定
  5. パスをASP.NETランタイム(%windir%\ Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll)または実行しているバージョンに設定します。

次に、web.configで、他の回答で説明されているように、適切なセクションにハンドラーを登録する必要があります。

4
Wallace Breza

ハンドラーを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>
2
James

以前の答えはどれも私にとってはうまくいきませんでした。
私は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");

ハンドラー向けのリクエストを無視するようにしました。
これが誰かのお役に立てば幸いです-私は髪を引きちぎっていました!

1
farmer-Bri

うまくいけば、私の解決策が他の人を助けるでしょう。サーバーがIIS6から7.5に移動すると、どちらも.Net 4.0 Integratedで、動作を停止するCaptchaコントロールがありました。この属性を削除すると、preCondition="integratedMode,runtimeVersionv2.0" から <add>ノード<system.webserver><handlers>が問題を解決しました。

0