2009-06-28 3 views
5

Я пытаюсь получить доступ к странице в HttpModule, и я думаю, что должен сделать это, вызвав HttpContext.Current.Handler (Это должно ссылаться на текущую страницу), но я все время получаю нуль.Почему HttpContext.Current.Handler имеет значение null?

Я занимаюсь разработкой с использованием .Net 3.5 framework.

Я проверяю это на AuthorizeRequest и AuthenticateRequest

Спасибо.

ответ

8

Возможно, запрос еще не был передан обработчику (например, вы находитесь в BeginRequest).

+0

Я проверяю на AuthorizeRequest и AuthenticateRequest – Paleta

+2

@Paleta: Вы не можете проверить его там. Обработчик будет выбран после того, как запрос будет аутентифицирован/авторизирован. Вы можете проверить его в событии PostMapRequestHandler и позже. –

0

По каким методам Вы имеете доступ к этому объекту?

В IHttpModule.Init будет null. Вам необходимо зарегистрировать обработчики событий на application, полученные в качестве параметра, на метод Init и выполнить свою работу.

+0

Я проверяю AuthorizeRequest и AuthenticateRequest – Paleta

4

В AuthorizeRequest и AuthenticateRequest обработчик еще не создан. (Обработчик не должен быть создан, если запрос отклонен). Поэтому это свойство равно null.

Зачем вам Page, и что вы пытаетесь сделать?

Вы можете попробовать обработку PostMapRequestHandler, что происходит после того, как он решает Page и бросать HttpException или позвонив по телефону Response.End если вы решили отклонить запрос.

Однако обратите внимание, что для получения экземпляра обработчика его конструктор должен работать; убедитесь, что он не делает ничего критического или чувствительного.

1

У меня есть аналогичные проблемы и, наконец, найдено решение. моя проблема была возвращена 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() { } 
} 

}

 Смежные вопросы

  • Нет связанных вопросов^_^