Por HttpContext.Current.Handler é nulo?
-
20-08-2019 - |
Pergunta
Estou tentando acessar uma página dentro de um HttpModule e eu acho que eu deveria fazer isso chamando HttpContext.Current.Handler (Isto deve fazer referência a página atual), mas eu estou ficando nulo todo o tempo.
Estou desenvolvendo utilizando .Net 3.5 Framework.
Estou verificando isso em AuthorizeRequest e AuthenticateRequest
Graças.
Solução
Provavelmente, o pedido não foi entregue a um manipulador ainda (por exemplo, você está em BeginRequest
).
Outras dicas
Em AuthorizeRequest
e AuthenticateRequest
, o manipulador ainda não foi criado. (Um manipulador não deve ser criado se o pedido for negado) Portanto, esta propriedade é null.
Por que você o Page
, eo que você está tentando fazer?
Você poderia tentar lidar com PostMapRequestHandler
, que ocorre depois que resolve o Page
, e jogando um HttpException
ou chamando Response.End
se você decidir negar o pedido.
No entanto, note que, para obter uma instância do manipulador, seu construtor deve executar; certifique-se que não faz nada crítico ou sensível.
Eu tenho problemas semelhantes e solução finalmente encontrada. meu problema foi devolvido NULL, em seguida, usar esse código em classe externa. Peço desculpas por meu Inglês não é bom.
solução via código: (testei)
Testado 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() { }
}
}
De que forma você está acessando esta propriedade?
Em IHttpModule.Init
, será null
. Você precisa registrar manipuladores de eventos no application
recebido como um parâmetro para o método Init
e fazer o seu trabalho lá.