2009-06-28 4 views
5

HttpModule内のページにアクセスしようとしていますが、これを行うにはHttpContext.Current.Handler(これは現在のページを参照する必要があります)を呼び出す必要がありますが、常にnullになっています。なぜHttpContext.Current.Handlerがnullですか?

私は.NET 3.5フレームワークを使用して開発しています。

は私がAuthorizeRequestとしたAuthenticateRequest

おかげでこれをチェックしています。

答えて

8

おそらく、要求がまだハンドラに渡されていない可能性があります(たとえば、BeginRequestにあります)。

+0

私はAuthorizeRequestとしたAuthenticateRequest – Paleta

+2

@Paletaにチェックしています:あなたはそこにそれを確認することはできません。ハンドラは、要求が認証/承認された後に選択されます。 'PostMapRequestHandler'イベント以降で確認できます。 –

0

どのような方法でこのプロパティにアクセスしていますか?

IHttpModule.Initには、nullとなります。 Initメソッドのパラメータとして受け取ったapplicationにイベントハンドラを登録し、そこで作業する必要があります。

+0

私はAuthorizeRequestとAuthenticateRequestをチェックしています – Paleta

4

AuthorizeRequestおよびAuthenticateRequestでは、ハンドラはまだ作成されていません。 (要求が拒否された場合はハンドラを作成しないでください)。したがって、このプロパティはnullです。

なぜあなたはPageですか、何をしようとしていますか?

あなたはそれがPageを解決した後に発生する、PostMapRequestHandlerを処理してみてください、とあなたが要求を拒否することを決定した場合HttpExceptionまたは呼び出しResponse.Endを投げることができました。

ただし、ハンドラのインスタンスを取得するには、そのコンストラクタを実行する必要があります。それが何か重要なことや敏感なことをしないことを確認してください。

1

私は同様の問題があり、最終的に解決策を見つけました。 私の問題はnullを返し、このコードを外部クラスで使用しました。 私の英語は苦手です。コード経由

ソリューション:(テストしている)
によってテスト:VS 2010

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 

//[Description of MyNamespace] 
//|================================================================================> 
//|-----*(In The Name Of GOD)*----- 
//|================================================================================> 

namespace MyNamespace 
{ 
//Most Be "partial class" And ": System.Web.UI.Page" !!!! 
public partial class MyClass : System.Web.UI.Page 
{ 
    //|============================================================> 
    //| Value Of Class. 
    //|============================================================> 

    static System.Web.UI.Page Page1 = null; 
    static System.Web.UI.Page Page2 = null; 

    int form1Index = -0; 


    //Most Be Static Method!!!! 
    public static void GetMyPage() 
    { 
     //Both are a result code. 
     //هر دو کد یه نتیجه می دهد 
     Page1 = HttpContext.Current.Handler as System.Web.UI.Page; 
     Page2 = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler; 

    } 


    //|============================================================> 
    //| DO() Methods Of MyClass Class. 
    //|============================================================> 
    public void DO() 
    { 
     //Call Your Static Method => GetMyPage() 
     GetMyPage(); 

     if (Page1 != null) 
     { 
      for (int i = 0; i < Page1.Controls.Count; i++) 
      { 
       if (Page1.Controls[i].ID == "form1") 
       { 
        form1Index = i; 
        break; 
       } 
      } 
     } 

     if (form1Index != -0) 
     { 
      for (int j = 0; j < Page1.Controls[form1Index].Controls.Count; j++) 
      { 
       string ControlsID = Page1.Controls[form1Index].Controls[j].ID; 
       // Code location ... 
       //محل قرار گیری کد ها... 
      } 

     } 
    } 



    //|============================================================> 
    //| Destructor Methods MyClass Class. 
    //|============================================================> 
    ~MyClass() { } 
} 

}

関連する問題