Как переопределить жизненный цикл загрузки страницы в ASP.NET, чтобы предотвратить загрузку формы ASPX?

Мне нужно проверить условие в нескольких файлах кода программной части ASPX, и в некоторых случаях я хотел бы полностью обойти обычный процесс загрузки страницы, чтобы соответствующая страница ASPX не загружалась. Вместо этого я хотел бы отправить в браузер настраиваемый ответ, написанный методом кода программной части.

Кто-нибудь знает, с чего начать - какие методы в жизненном цикле страницы следует переопределить и как лучше всего гарантировать, что мой настраиваемый Response.Write отправляется в браузер, в то время как обычное содержимое страницы ASPX подавляется?

Спасибо.


person Community    schedule 08.04.2009    source источник


Ответы (3)


Наверное, самый простой способ - использовать Page_Load().

protected void Page_Load(object sender, EventArgs e)
{
    bool customResponse = true;
    if (customResponse)
    {
        Response.Write("I am sending a custom response");
        Response.End(); //this is what keeps it from continuing on...
    }
}
person Seibar    schedule 08.04.2009
comment
Response.Clear также, вероятно, будет полезным - person Ken Browning; 09.04.2009

«Легкий» способ сделать это с Response.End () ужасен для производительности, вызывая исключение, которое завершает поток.
http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx
http://weblogs.asp.net/hajan/archive/2010/09/26/why-not-to-use-httpresponse-close-and-httpresponse-end.aspx

У меня был такой же вопрос, и я решил его таким образом. Это двухэтапный процесс: сначала вызовите HttpApplication.CompleteRequest () и завершите обработку. Затем переопределите Render (), чтобы не вызывался базовый метод. Пример кода становится таким:

bool customResponse = true;

protected void Page_Load(object sender, EventArgs e)
{
    if (customResponse)
    {
        Response.Write("I am sending a custom response");
        this.Context.ApplicationInstance.CompleteRequest();
        return;   // Bypass normal processing.
    }
    // Normal processing...
}

protected override void Render(HtmlTextWriter writer)
{
    if (!customResponse)
        base.Render(writer);        // Then write the page as usual.
}
person Keith Robertson    schedule 04.05.2011

Это действительно зависит от того, на что вы отвечаете, это опубликованное поле формы, информация для аутентификации и т. Д.? Метод, показанный с использованием Page_Load, будет работать, но все, что до этого момента в жизненном цикле страницы, также будет выполняться.

person Community    schedule 08.04.2009