web-dev-qa-db-ja.com

ExtensionlessUrlHandlerはMVCアプリケーションで何をしますか?

私はMVCアプリケーションを合理化し、可能な限り削除しようとしています。誰かが、以下のこのコードがアプリケーションのルートにあるweb.configファイルで何をするのか説明してくれますか。私はコメントアウトしましたが、それでもアプリケーションを実行できました...

<system.webServer>

  <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/>
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
    </handlers>
    ...

私はこの質問を見ました: ASP.NET MVC 4 and ExtensionlessUrlHandler これはこのブログにリンクする答えがあります: http://blogs.msdn.com/b/tmarq/archive /2010/05/26/how-extensionless-urls-are-handled-by-asp-net-v4.aspx しかし、私の質問を説明するために見つけることができません。

私は使用しています:IIS 8、ASP.NET MVC 4 .NET 4.5開発と本番の両方で

19
Giorgio

IIS ExpressはIISとは異なるハンドラー名を使用します

次のマークアップを追加すると、IIS express onlyのエクステンションレスハンドラーが無効になります。

<remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrl-Integrated-4.0" />
10
Ori Calvo

Web.configファイルを確認する必要があります。次の設定が存在する場合

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
  </modules>    
</system.webServer>

次に、ExtensionlessUrlHandlerハンドラーを削除した後、すべてがまだ機能している理由を説明できます。

デフォルトでは、runAllManagedModulesForAllRequestsはfalseです。つまり、IISは各リクエストをマネージ(.NET)モジュールに委任しません。URLのないURLを処理する方法を知っているコアモジュール名前はUrlRoutingモジュールであり、マネージ(ネイティブではない)モジュールです。つまり、リクエストを処理する機会がなく、IISはハンドラーマッピングに従って内部的に処理しようとしますところで、デフォルトの設定では、拡張子のないURLは静的リソースとして扱われるため、403.14ステータスコードで失敗します(ほとんどの場合)

runAllManagedModulesForAllRequestsがtrueの場合、IISに送信される要求はすべてのマネージモジュールに送信されます。UrlRoutingモジュールには、要求を処理してASP.NETに委任する変更があります。 MVC。

要約すると、ASP.NET MVCアプリケーションを実行する場合、2つのオプションがあります

  1. runAllManagedModulesForAllRequestsはfalseです。 ExtensionlessUrlHandlerを登録する必要があります
  2. runAllManagedModulesForAllRequestsはtrueです。 IISハンドラーリストからExtensionlessUrlHandlerを削除できます。
19
Ori Calvo