routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
とは
プロジェクトに.axdファイルが見つかりません。このルートルールを削除できますか?
.axdファイルは物理的には存在しません。 ASP.NETは、.axd拡張子(ScriptResource.axdおよびWebResource.axd)を持つURLを内部的に使用し、それらはHttpHandlerによって処理されます。
したがって、ASP.NET MVCが専用のHttpHandlerに処理させるのではなく、要求を処理しようとするのを防ぐために、このルールを保持する必要があります。
背景
このファイルを開くと:
_%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config
_
これはファイル内にあります。
_<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />
_
それは基本的に、Asp.NETランタイムに次のように伝えています。
を実行してくださいWebResource.axdはファイルではなく、単なるマップです(言うことができる場合) )からAssemblyResourceLoader
へ。ハンドラーが登録される名前です。私のマシンでは、次の.axdハンドラーが見つかりました。
_<add path="eurl.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
<add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
<add verb="*" path="*_AppService.axd"
_
OK、ではそのハンドラーは何をするのでしょうか?
AssemblyResourceLoader
は、アセンブリ内の埋め込みファイルを探す方法を知っているので、それを提供(クライアントに送信、つまりブラウザ)することができます。たとえば、asp.net Webフォームでは、検証コントロールを使用する場合、JavaScriptに依存してWebページにエラーを表示します。ただし、そのJavaScriptはアセンブリに埋め込まれています。ブラウザにはjavascriptが必要なので、ページのhtmlにこれが表示されます。
_<script src="/YourSite/WebResource.axd?d=fs7zUa...&t=6342..." type="text/javascript"></script>
_
AssemblyResourceLoader
は、クエリ文字列の情報を使用してJavaScriptが埋め込まれているアセンブリを見つけ、JavaScriptを返します。
質問に戻る
質問に答えるために、何が:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
これは、そのルートパターンに一致する要求を処理しないことをルーティングエンジンに伝えています。つまり、_.axd
_リクエストは処理しません。どうして? MVC自体は_.axd
_および_.aspx
_に類似したHttpHandlerであり、web.configファイルにある他の多くのハンドラーであるためです。 MVCハンドラーは、アセンブリに埋め込まれたリソースを探すなど、リクエストを処理する方法を知りません。AssemblyResourceLoader
はその方法を知っています。 MVCは、この質問と回答の範囲を超えて行う方法をすべて知っています。
ここ は_.axd
_を詳細に説明する素晴らしい記事です。
パターン{resource} .axd/{* pathInfo}のルートは、WebResource.axdやScriptResource.axdなどのWebリソースファイルに対する要求がコントローラーに渡されないようにするために含まれています。
リンクを読む: http://msdn.Microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx
ルーティングが特定のURL要求を処理しないように指定することもできます。ルートを定義し、そのパターンを処理するために StopRoutingHandler クラスを使用するように指定することにより、ルーティングが特定の要求を処理しないようにします。リクエストが StopRoutingHandler オブジェクトによって処理されると、 StopRoutingHandler オブジェクトはルートとしてのリクエストの追加処理をブロックします。代わりに、要求はASP.NETページ、Webサービス、または他のASP.NETエンドポイントとして処理されます。 RouteCollection.Ignore メソッド(またはMVCアプリケーションの場合は RouteCollectionExtensions.IgnoreRoute )を使用して、 StopRoutingHandler クラスを使用するルートを作成できます。
これらはファイルではありません(ディスク上には存在しません)-それらはいくつかのHTTPハンドラーが登録される単なる名前です。