왜 httpcontext.current.handler가 null인가?
-
20-08-2019 - |
문제
나는 httpmodule 내에서 페이지에 액세스하려고 노력하고 있으며 httpcontext.current.handler (현재 페이지를 참조해야 함)를 호출 하여이 작업을 수행해야한다고 생각합니다.
.NET 3.5 프레임 워크를 사용하여 개발 중입니다.
Autherizerequest 및 AuthenticateRequest에서 이것을 확인하고 있습니다
감사.
해결책
아마도 요청은 아직 핸들러에게 전달되지 않았을 것입니다 (예 : 당신은 BeginRequest
).
다른 팁
~ 안에 AuthorizeRequest
그리고 AuthenticateRequest
, 핸들러는 아직 생성되지 않았습니다. (요청이 거부 된 경우 핸들러를 작성해서는 안됩니다) 따라서이 속성은 NULL입니다.
왜 당신은 Page
, 그리고 당신은 무엇을하려고합니까?
당신은 취급을 시도 할 수 있습니다 PostMapRequestHandler
, 이는 해결 후 발생합니다 Page
, 그리고 던지기 HttpException
또는 전화 Response.End
요청을 거부하기로 결정한 경우.
그러나 핸들러의 인스턴스를 얻으려면 생성자가 실행해야합니다. 비판적이거나 민감한 일을하지 않도록하십시오.
비슷한 문제가 있고 마침내 해결책을 찾았습니다. 내 문제는 NULL로 반환 한 다음이 코드를 외부 클래스에서 사용했습니다. 내 영어에 대해 사과드립니다.
코드를 통한 해결책 : (테스트)
테스트 : 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() { }
}
}
이 속성에 어떤 방법으로 액세스하고 있습니까?
~ 안에 IHttpModule.Init
, 그것은 될 것입니다 null
. 이벤트 처리기를 등록해야합니다 application
매개 변수로 수신되었습니다 Init
방법과 그곳에서 일하십시오.