2009-06-28 16 views
5

Estoy intentando acceder a una página dentro de un HttpModule y creo que debería hacer esto llamando a HttpContext.Current.Handler (Esto debería hacer referencia a la página actual) pero me estoy volviendo nulo todo el tiempo.¿Por qué HttpContext.Current.Handler es nulo?

Estoy desarrollando con el framework .Net 3.5.

Estoy comprobando esto en AuthorizeRequest y AuthenticateRequest

Gracias.

Respuesta

8

Probablemente, la solicitud no se ha entregado a un controlador aún (por ejemplo, está en BeginRequest).

+0

Estoy comprobando en AuthorizeRequest y AuthenticateRequest – Paleta

+2

@Paleta: No se puede comprobar que existe. El controlador se seleccionará después de que la solicitud sea autenticada/autorizada. Puedes verificarlo en el evento 'PostMapRequestHandler' y más tarde. –

0

¿A qué método accede a esta propiedad?

En IHttpModule.Init, será null. Debe registrar manejadores de eventos en el application recibidos como un parámetro para el método Init y hacer su trabajo allí.

+0

Estoy comprobando en AuthorizeRequest y AuthenticateRequest – Paleta

4

En AuthorizeRequest y AuthenticateRequest, el manipulador no se ha creado todavía. (No se debe crear un controlador si se deniega la solicitud) Por lo tanto, esta propiedad es nula.

¿Por qué haces el Page, y qué estás tratando de hacer?

usted podría intentar manejar PostMapRequestHandler, que se produce después de que se resuelva la Page, y lanzando un HttpException o llamando Response.End si decide rechazar la solicitud.

Sin embargo, tenga en cuenta que para obtener una instancia del controlador, su constructor debe ejecutarse; asegúrese de que no haga nada crítico o sensible.

1

Tengo problemas similares y finalmente encontré la solución. mi problema fue devuelto nulo y luego uso este código en clase externa. Pido disculpas por mi inglés no es bueno.

solución a través de código: (lo he probado)
probado por: 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() { } 
} 

}

Cuestiones relacionadas