ルートとは何ですか。IgnoreRoute(“ {resource} .axd / {* pathInfo}”)


回答:


81

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

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


5
JavaScriptとスタイルが含まれているため、サイトに「axdファイル」をダウンロードしてもらいたいと思います。
Moulde 2013年

3
この答えは間違っています。IgnoreRouteMVCのルーティング構成に入れる理由は、MVCが要求を処理しないようにするためです。これは、スクリプトを提供するために、.axdエンドポイントを別のHTTPハンドラー(MVCの一部ではないハンドラー)で処理する必要があるためです。
NightOwl888

1
これは.NETコアではまったく不要ですか?私は1時間ほどGoogleで検索しましたが、同等のステップが何であるかについての参照が見つからないので、それは単に必要ではないと仮定しています。
Dinerdo

35

いくつかの背景

このファイルを開いた場合:

%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...&amp;t=6342..." type="text/javascript"></script>

AssemblyResourceLoaderJavaScriptはクエリ文字列内の情報を使用して埋め込まれているアセンブリを見つけるとJavaScriptを返します。


質問に戻る

だから、質問に答えるために、何ですか:

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

これは、そのルートパターンに一致するリクエストを処理しないことをルーティングエンジンに伝えています。つまり、.axdリクエストは処理されません。どうして?MVC自体はとのHttpHandlerと類似しているため.axd.aspxしてweb.configファイルである他の多くのハンドラ。MVCハンドラーは、アセンブリ内の埋め込みリソースを探すなど、要求を処理する方法を知りませんAssemblyResourceLoader。その方法を知っています。MVCは、この質問と回答の範囲を超える方法をすべて知っています。


2
これは間違いなく間違いなく受け入れられる答えであり、私からの答えも必要です。
Yahya

最後に、WebResource.axdが実際に行うことの明確な説明と、質問への明確な回答も提供します。ありがとう
ben_mj

18

パターン{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のクラスを。



7

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


私が言う最も適切な答え。
Sakthivel、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.