2

簡単な 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 ルーティングを使用すると、これらのイベントは発生しません。何か不足していますか?

4

4 に答える 4

7

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 の「不十分な」要素を助け、減らすことを願っています。:)

-トッド

于 2009-01-12T19:36:26.950 に答える
2

気まぐれで奇妙な(そして愚かな)答えを見つけました:)

ルートの最後に「.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());

なんて完全に不自由です:) ...しかし、それは間違いなく修正です!

于 2008-12-30T13:51:52.880 に答える
0

私はアプリケーション変数とViewstateをチェックしました.これら2つは明らかに機能しています..サーバーログについてはわかりません:S

于 2009-04-17T10:56:17.763 に答える
0

あなたが言う時

「ルートの最後に「.aspx」を追加しないと、Global.asax で何も発生しません。つまり、BeginRequest、AuthenticateRequest、EndRequest などを取得しません。また、取得しません。 SessionState か何か。」

IIS はそのような要求をログ ファイルに記録しますか、それとも単に匿名でしょうか? アプリケーション変数と ViewState はどうですか?

申し訳ありませんが、まだテストしていませんが、既に知っているかどうかを尋ねるだけですか?

于 2009-04-17T09:50:16.533 に答える