HttpApplicationFactory.ReflectOnMethodInfoIfItLooksLikeEventHandler

могу использоватьPostAuthenticateRequest событие Global.asax? я следуюэтот урок и упоминается, что я должен использоватьPostAuthenticateRequest мероприятие. Когда я добавил событие Global.asax, оно создало два файла: разметку и файл с выделенным кодом. Вот содержимое файла с выделенным кодом

using System;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

namespace authentication
{
    public class Global : System.Web.HttpApplication
    {    
        protected void Application_Start(object sender, EventArgs e)
        {    
        }

        protected void Session_Start(object sender, EventArgs e)
        {    
        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {
        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {    
        }

        protected void Application_Error(object sender, EventArgs e)
        {    
        }

        protected void Session_End(object sender, EventArgs e)
        {    
        }

        protected void Application_End(object sender, EventArgs e)
        {    
        }
    }
}

Теперь, когда я печатаю

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e)

Это успешно называется. Теперь я хочу знать, как этоPostAuthenticateRequest связан с этимApplication_OnPostAuthenticateRequest метод? Как я могу изменить метод на другой?

Ответы на вопрос(1)

Решение Вопроса

механизм называетсяAuto Event WireupПо той же причине вы можете написать

Page_Load(object sender, EventArgs e) 
{ 
} 

в вашем коде и метод будет автоматически вызываться при загрузке страницы.

MSDN описание дляSystem.Web.Configuration.PagesSection.AutoEventWireup свойство:

Получает или задает значение, указывающее, автоматически ли события для страниц ASP.NET подключаются к функциям обработки событий.

когдаAutoEventWireup являетсяtrueОбработчики автоматически связываются с событиями во время выполнения на основе их имени и подписи. Для каждого события ASP.NET ищет метод с именем в соответствии с шаблоном.Page_eventname(), такие какPage_Load() или жеPage_Init(), ASP.NET сначала ищет перегрузку, которая имеет типичную сигнатуру обработчика событий (то есть она указываетObject а такжеEventArgs параметры). Если обработчик событий с этой подписью не найден, ASP.NET ищет перегрузку без параметров. Подробнее вэтот ответ.

Если вы хотите сделать это явно, вы должны написать следующее

public override void Init()
{
    this.PostAuthenticateRequest +=
        new EventHandler(MyOnPostAuthenticateRequestHandler);
    base.Init();
}

private void MyOnPostAuthenticateRequestHandler(object sender, EventArgs e)
{
}
 Tux13 янв. 2011 г., 09:49
Спасибо, что сообщили мне об этом.
 Sinjai01 февр. 2019 г., 22:01
За кулисами событие подключеноHttpApplicationFactory.ReflectOnMethodInfoIfItLooksLikeEventHandler.
 Pauli Østerø13 янв. 2011 г., 09:11
остерегайтесь этого, т.е. Application_Start или Session_Start могут обрабатываться ТОЛЬКО с помощью механизма Auto Event Wireup, для них нет явных событий в классе HttpApplication, на который вы можете подписаться.
 Tux13 янв. 2011 г., 09:06
Я потратил впустую час, потому что он не показывался в Intellisense, и я подумал, что, возможно, мне придется как-то подписаться на событие. Собирался опубликовать вопрос о том, как реализовать мероприятие, но потом я подумал, давайте попробуем и посмотрим, получу ли я какие-нибудь ошибки и вуаля! это сработало :) В любом случае, спасибо

Ваш ответ на вопрос