回答:
.axdファイルは物理的に存在しません。ASP.NETは、.axd拡張子(ScriptResource.axdおよびWebResource.axd)を持つURLを内部で使用し、それらはHttpHandlerによって処理されます。
したがって、専用のHttpHandlerに要求を処理させるのではなく、ASP.NET MVCが要求を処理しようとしないように、このルールを維持する必要があります。
IgnoreRoute
MVCのルーティング構成に入れる理由は、MVCが要求を処理しないようにするためです。これは、スクリプトを提供するために、.axd
エンドポイントを別のHTTPハンドラー(MVCの一部ではないハンドラー)で処理する必要があるためです。
いくつかの背景
このファイルを開いた場合:
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config
これはファイル内にあります。
<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />
これは基本的に、Asp.NETランタイムに次のように伝えています。「ちょっとasp.netの人、WebResource.axdに対する要求が来たら、AssemblyResourceLoaderを使用して要求を処理してください。」
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"
では、ハンドラーは何をするのでしょうか?
AssemblyResourceLoader
それはそれを提供する(ブラウザ、すなわち、それをクライアントに送信する)ことができるようにアセンブリ内に埋め込まれたファイルを検索する方法を知っています。たとえば、asp.net Webフォームでは、検証コントロールを使用する場合、Webページにエラーを表示するためにJavaScriptに依存しています。ただし、その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自体はとのHttpHandlerと類似しているため.axd
と.aspx
してweb.configファイルである他の多くのハンドラ。MVCハンドラーは、アセンブリ内の埋め込みリソースを探すなど、要求を処理する方法を知りませんAssemblyResourceLoader
。その方法を知っています。MVCは、この質問と回答の範囲を超える方法をすべて知っています。
パターン{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の(またはメソッドRouteCollectionExtensions.IgnoreRouteを使用したルートを作成するためにMVCアプリケーションのための)StopRoutingHandlerのクラスを。