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>
IIS7を使用していますか。使用している場合、アプリケーションプールはクラシックモードまたはパイプラインモードで実行されていますか?パイプラインモードのIIS7の場合、ハンドラー参照は次のセクションに移動する必要があります
<system.webServer>
<handlers>
</handlers>
<system.webServer>
次のセクションではなく。
<system.web>
<httpHandlers>
</httpHandlers>
</system.web>
この問題に悩まされている人たちのガイドと同じように、私は重要な属性があることを発見しました。
resourceType="Unspecified"
私はもともとこれをセットアップするためにマイクロソフトの例に従いました、そして彼らはそれを
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のようなカスタム拡張機能を使用している場合は、ScriptMapIISで、ASP.NETランタイムを指すように指定して、IISが要求を正しいプロセッサに転送できるようにします。
次に、web.configで、他の回答で説明されているように、適切なセクションにハンドラーを登録する必要があります。
ハンドラーを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>
以前の答えはどれも私にとってはうまくいきませんでした。
私は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 Integratedで、動作を停止するCaptchaコントロールがありました。この属性を削除すると、preCondition="integratedMode,runtimeVersionv2.0"
から <add>
ノード<system.webserver><handlers>
が問題を解決しました。