ASP.NETルーティング-カスタムルートはGlobal.asaxのすべてを完全にスキップしますか?
質問
単純なASP.NET 3.5 SP1 Webフォームアプリがあります... System.Web.Routing DLLを追加し、標準のASP.NETページを"として返す単純なルートを作成しました。 IHttpHandler"。
すべてが良い... HttpContext.Current.Userが null ???
であることを除いてそれで、もう少し掘り下げました(Global.asaxファイルのすべてのイベントにブレークポイントを配置しました)。通常、これらのブレークポイントはヒットします(標準の" .aspx"ページに移動すると):
- Application_BeginRequest
- Application_AuthenticateRequest
- Application_EndRequest
しかし、ASP.NETルーティングを使用している場合...これらのイベントはどれも発生していません。何か不足していますか?
解決
IIS6を使用していると仮定すると、代わりに「ワイルドカード」を定義することができます。拡張ハンドラー。この単純な「すべてをキャッチ」を追加すると、 IIS6にマッピングすると、拡張機能のないリクエストを処理できるようになります。デフォルトでは、.NETインストーラーは" .aspx"をマップします。 aspnet_isapi.dllに-それが.aspx拡張子が機能する理由です。 APS.NETエンジンに拡張子のないリクエストをマップするには、IISにすべてのリクエストを調べるように指示する必要があります。
プロセスを説明する簡単な記事を次に示します。
http:// haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx
「ラメ」を助け、減らす希望URLの要因。 :)
-Todd
他のヒント
気紛れで奇怪な(そして愚かな)答えを見つけた:)
" .aspx"を追加しない場合ルートの最後まで、Global.asaxで何も起動しません。つまり、BeginRequest、AuthenticateRequest、EndRequestなどを取得しません。また、SessionStateなども取得しません。
したがって、「修正」これからルートを変更するだけでした:
RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}", new MyHandler());
これ:
RouteTable.Routes.Add("Blah", new Route("Blah/{reportName}.aspx", new MyHandler());
どのように完全にラメ:) ...しかし、それはそれでもなお修正です!
言うとき
"" .aspx"を追加しない場合ルートの最後まで、Global.asaxで何も起動しません。つまり、BeginRequest、AuthenticateRequest、EndRequestなどを取得しません。また、SessionStateなども取得しません。
IISは、そのようなリクエストをログファイルに記録しますか、それとも単に匿名ですか?アプリケーション変数とViewStateはどうですか?
申し訳ありませんが、まだテストしていませんが、既に知っているかどうかを尋ねるだけですか?
iはアプリケーション変数とViewstateをチェックしましたが、これら2つは明らかに動作しています。サーバーログについてはわかりません:S