Почему HttpContext.Current.Handler имеет значение null? - PullRequest
6 голосов
/ 28 июня 2009

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

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

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

Спасибо.

Ответы [ 4 ]

10 голосов
/ 28 июня 2009

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

5 голосов
/ 28 июня 2009

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

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

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

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

2 голосов
/ 01 августа 2013

У меня похожие проблемы и, наконец, найдено решение. моя проблема была возвращена нуль, а затем использовать этот код на внешний класс. Я прошу прощения за мой английский не хорошо.

решение с помощью кода: (протестировано)
Протестировано: 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() { }
}

}

0 голосов
/ 28 июня 2009

Каким способом вы получаете доступ к этому свойству?

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

...