2009-06-28 25 views
5

Ich versuche auf eine Seite innerhalb eines HttpModule zugreifen, und ich denke, ich sollte dies tun, indem Sie HttpContext.Current.Handler (Dies sollte die aktuelle Seite verweisen), aber ich bekomme die ganze Zeit Null.Warum HttpContext.Current.Handler ist null?

Ich entwickle mit .Net 3.5 Framework.

Ich überprüfe dies auf AuthorizeRequest und AuthenticateRequest

Dank.

Antwort

8

Wahrscheinlich wurde die Anfrage noch nicht an einen Handler ausgegeben (Sie befinden sich beispielsweise in BeginRequest).

+0

Ich überprüfe auf AuthorizeRequest und AuthenticateRequest – Paleta

+2

@Paleta: Sie können es nicht dort überprüfen. Der Handler wird ausgewählt, nachdem die Anfrage authentifiziert/autorisiert wurde. Sie können es im 'PostMapRequestHandler' Event und später überprüfen. –

0

In welcher Methode greifen Sie auf diese Eigenschaft zu?

In IHttpModule.Init wird es null sein. Sie müssen Ereignishandler auf der application als Parameter an die Init-Methode erhalten und Ihre Arbeit dort erledigen.

+0

Ich überprüfe AutorizeRequest und AuthenticateRequest – Paleta

4

In AuthorizeRequest und AuthenticateRequest wurde der Handler noch nicht erstellt. (Ein Handler sollte nicht erstellt werden, wenn die Anforderung abgelehnt wird.) Daher ist diese Eigenschaft null.

Warum hast du die Page, und was versuchst du zu tun?

Sie könnten PostMapRequestHandler versuchen Handhabung, die auftritt, nachdem er die Page löst, und werfen einen HttpException oder rufen Response.End, wenn Sie sich entscheiden, um die Anfrage abzulehnen.

Beachten Sie jedoch, dass der Konstruktor des Konstruktors ausgeführt werden muss, um eine Instanz des Handlers zu erhalten. stellen Sie sicher, dass es nichts Kritisches oder Sensitives tut.

1

Ich habe ähnliche Probleme und schließlich gefundene Lösung. mein Problem wurde null zurückgegeben, dann verwenden Sie diesen Code für externe Klasse. Ich entschuldige mich für mein Englisch ist nicht gut.

Lösung über Code: (Haben getestet)
Geprüft: 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() { } 
} 

}