Pourquoi HttpContext.Current.Handler est null?
-
20-08-2019 - |
Question
J'essaie d'accéder à une page dans un HttpModule et je pense que je devrais le faire en appelant HttpContext.Current.Handler (cela devrait faire référence à la page en cours), mais j'obtiens tout le temps une valeur nulle.
Je développe à l'aide du framework .Net 3.5.
Je vérifie ceci sur AuthorizeRequest et AuthenticateRequest
Merci.
La solution
Probablement, la demande n'a pas encore été transmise à un gestionnaire (par exemple, vous êtes dans BeginRequest
).
Autres conseils
Dans AuthorizeRequest
et AuthenticateRequest
, le gestionnaire n'a pas encore été créé. (Un gestionnaire ne doit pas être créé si la demande est refusée.) Par conséquent, cette propriété est null.
Pourquoi faites-vous la Page
et qu'essayez-vous de faire?
Vous pouvez essayer de gérer PostMapRequestHandler
, ce qui se produit après la résolution du problème HttpException
, et d'envoyer un Response.End
ou d'appeler <=> si vous décidez de refuser la demande.
Cependant, veuillez noter que pour obtenir une instance du gestionnaire, son constructeur doit être exécuté; assurez-vous qu'il ne fait rien de critique ou de sensible.
J'ai des problèmes similaires et j'ai finalement trouvé une solution. mon problème a été retourné null puis utilisez ce code sur une classe externe. Je m'excuse pour mon anglais n'est pas bon.
solution via le code: (avoir testé)
Testé par: 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() { }
}
}
Par quelle méthode accédez-vous à cette propriété?
Dans IHttpModule.Init
, ce sera null
. Vous devez enregistrer les gestionnaires d'événements sur le application
reçu en tant que paramètre de la méthode Init
et y effectuer votre travail.