Perché HttpContext.Current.Handler è null?
-
20-08-2019 - |
Domanda
Sto provando ad accedere a una Pagina all'interno di un HttpModule e penso che dovrei farlo chiamando HttpContext.Current.Handler (questo dovrebbe fare riferimento alla pagina corrente) ma sto diventando sempre nullo.
Sto sviluppando utilizzando .Net 3.5 framework.
Sto verificando questo su AuthorizeRequest e AuthenticateRequest
Grazie.
Soluzione
Probabilmente, la richiesta non è stata ancora consegnata a un gestore (ad esempio, sei in BeginRequest
).
Altri suggerimenti
In AuthorizeRequest
e AuthenticateRequest
, il gestore non è stato ancora creato. (Non è possibile creare un gestore se la richiesta viene rifiutata) Pertanto, questa proprietà è nulla.
Perché sei il Page
e cosa stai cercando di fare?
Potresti provare a gestire PostMapRequestHandler
, che si verifica dopo aver risolto il HttpException
e lanciare un Response.End
o chiamare <=> se decidi di rifiutare la richiesta.
Tuttavia, tieni presente che per ottenere un'istanza del gestore, il suo costruttore deve essere eseguito; assicurati che non faccia nulla di critico o sensibile.
Ho problemi simili e ho finalmente trovato la soluzione. il mio problema è stato restituito null quindi utilizzare questo codice su classe esterna. Mi scuso per il mio inglese non è buono.
soluzione tramite codice: (hanno testato)
Testato da: 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() { }
}
}
In quale metodo accedi a questa proprietà?
In IHttpModule.Init
, sarà null
. Devi registrare i gestori di eventi sul application
ricevuto come parametro nel metodo Init
e svolgere il tuo lavoro lì.