2017-07-13 7 views
1
Routes.Ignoreroutes("{resource}.axd/{*pathinfo}") 

は、MVC.NETのscriptresource.axdまたはwebresource.axdを無視するためにRouteconfigクラスに意図的に追加されています。しかし、なぜ私たちはwebformsでそのようなステートメントが必要ないのですか?なぜWebフォームでRoutes.Ignoreroutes( "{resource} .axd/{* pathinfo}")が故意に必要ではないのですか?

 void Application_Start(object sender, EventArgs e) 

でこのようなステートメントを追加できることはわかっていますが、Webformsではこれを行う必要はありません。または、WebFormsにそのようなステートメントを追加することをお勧めします。

+2

ここでの事である、あなたは、ウェブ上のフォームについて知っている必要があります。 Webフォームにはページライフサイクルがあり、mvcにはページライフサイクルがありません。要求ライフサイクルをサポートします。ルートとウェブページにルートがないのはそのためです。 –

答えて

2

AXDファイルは実際のファイルではなく(物理的なコンテキスト内に存在します)、登録されたエイリアスはです。既定でASP.NETは、HTTP処理ルーチンによって提供される内部コンテキストでScriptResource.axd & WebResource.axdを使用します。あなたにルーティングしたい場合

RouteCollection.IgnoreRouteはすべての要求を無視し、任意のコントローラに(存在しないファイルの要求である)を通過AXD要求を防ぐために

ASP.NET Routing記事に暗示それらのAXDファイル、指さ がファイルを指す要求であっても、すべての要求を処理する場合、RouteCollectionオブジェクトの RouteExistingFilesプロパティをtrueに設定すると、デフォルトの動作を上書きできます。 この値をtrueに設定すると、定義済みの パターンに一致するすべての要求がルーティングによって処理されます。

ルーティングで特定のURL リクエストを処理しないように指定することもできます。 によって経路が特定の要求を処理できないようにし、StopRoutingHandlerクラス を使用してそのパターンを処理する必要があることを指定します。 StopRoutingHandlerオブジェクトによって要求が処理されると、StopRoutingHandlerオブジェクトは、要求の追加処理をルートとしてブロックします。代わりに、 という要求は、ASP.NETページ、Webサービス、またはその他のASP.NET エンドポイントとして処理されます。

です。 example.com/WebResource.axd?d=XXXXX&t=ZZZZZZの場合、特定のアセンブリファイル内の埋め込みリソースの特定のコードスニペットが返される可能性があります。はMVCではなく、Webフォームでのみ使用されます。後にレンダリングされた特定のアセンブリから埋め込まれたリソースのコンテナとしてAXDの別名を、多くの場合、Webフォーム使用

<httpHandlers> 
    <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" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" /> 
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/> 
    <add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" /> 
    ... 
</httpHandlers> 

注:

あなたは%Windir%\Microsoft.NET\Framework\[version number]\Configでweb.configファイルを調べている場合は、このようなWebResource &他のAXDパスが存在しますサーバーコントロールはアセンブリファイルを使用してページライフサイクル全体を実行するための事前定義されたスクリプトを保存するため、ASPXページによって異なります。しかし、MVC自体は、AXDエイリアスと同様の方法でリクエストを処理するHTTPハンドラであり、MVCは埋め込みリソースを使用するのではなくリソースファイルを直接取得するので(MVCにSystem.Web.UI.WebResourceまたはSystem.Web.UI.Page.ClientScript.GetWebResourceUrl(this.GetType, [resource path])を呼び出すなどのことはありません)、AXDエイリアスへのリクエスト無視してください。

その他の参照:

Just Where Is WebResource.axd?

What is WebResource.axd?

関連する問題