2

Asp.Net Web フォーム アプリ (IIS 7、統合モードで実行) にかなり基本的なルートを追加しようとしています: http://mydomain.com/foo/に来るリクエストの結果を表示したいと思います動的ページ ( http://mydomain.com/foopage.aspx )。

これをすべて行う RouteHandler を作成しましたが、正しくルーティングされているようです。

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
     var page = System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("~/foo.aspx", typeof(MyApp.Web.Foo)) as MyApp.Web.Foo;
     return page as IHttpHandler;
    }

問題は、RouteHandler の GetHttpHandler メソッド内で、現在のユーザー (requestContext.HttpContext.User、System.Web.HttpContext.Current.User) のすべてのインスタンスが null であることです。悲しいことに、foo.aspx は現在のユーザーが何であるか (ログイン コントロール、ロールなど) を知る必要があるため、ページをレンダリングすると null 参照例外がスローされます。私の推測では、これらのルート ハンドラーは、Asp.Net がユーザー情報で HttpContext を接続する機会を得る前に起動していると思います。回避策のアイデアはありますか?

PS - これは、 http://mydomain.com/foo/default.aspxのページで Server.Transfer を実行することで実現できることを認識しています。役に立たないフォルダーがたくさんあるのではなく、この種のルーティングを使用したいと思います。

ありがとう!

4

2 に答える 2

0

非常によく似たこの質問への回答を参照してください。

于 2009-10-08T03:28:49.743 に答える
0

私は自分でこれを理解することができました。

この質問と同じように、ルートの起点が .aspx ( http://mydomain.com/foo-origin.aspx ) で終わっている場合、ルートは正常に機能していましたが、そうでない場合 ( http://mydomain.com/ foo-origin/ )。

Web フォームを使用したルーティングのセットアップに関する MSDN の記事では、Web 構成にいくつかの変更を加えるように指示されていますが、modules ノードでrunAllManagedModulesForAllRequestsを true に設定する必要があることは省略されています。

<configuration>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
  </system.webServer>
</configuration>

今ではスムーズに動作します。

于 2009-10-09T15:32:41.057 に答える