web-dev-qa-db-ja.com

routes.IgnoreRoute( "{resource} .axd / {* pathInfo}")とは

routes.IgnoreRoute("{resource}.axd/{*pathInfo}")とは

プロジェクトに.axdファイルが見つかりません。このルートルールを削除できますか?

89
Eric Yin

.axdファイルは物理的には存在しません。 ASP.NETは、.axd拡張子(ScriptResource.axdおよびWebResource.axd)を持つURLを内部的に使用し、それらはHttpHandlerによって処理されます。

したがって、ASP.NET MVCが専用のHttpHandlerに処理させるのではなく、要求を処理しようとするのを防ぐために、このルールを保持する必要があります。

73
Roy Dictus

背景

このファイルを開くと:

_%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...&amp;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_を詳細に説明する素晴らしい記事です。

24
CodingYoshi

パターン{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 クラスを使用するルートを作成できます。

18

これらはファイルではありません(ディスク上には存在しません)-それらはいくつかのHTTPハンドラーが登録される単なる名前です。

7
7
TwTw