2011-01-13 15 views
8

¿Cómo puedo utilizar el evento PostAuthenticateRequest de Global.asax? Estoy siguiendo this tutorial y menciona que tengo que usar el evento PostAuthenticateRequest. Cuando agregué el evento Global.asax, creé dos archivos, el marcado y el archivo de código subyacente. Aquí está el contenido del archivo de código subyacente¿Cómo ocurre la vinculación del evento Global.asax PostAuthenticateRequest?

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) 
     {  
     } 
    } 
} 

Ahora cuando introduzco el

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e) 

Se llama éxito. Ahora quiero saber cómo está el PostAuthenticateRequest vinculado a este Application_OnPostAuthenticateRequest método? ¿Cómo puedo cambiar el método a otro?

Respuesta

14

magia ..., un mecanismo llamado Auto Evento Wireup, la misma razón por la que puede escribir

Page_Load(object sender, EventArgs e) 
{ 
} 

en su código subyacente y el método automáticamente se llamará cuando se carga la página.

MSDN description for System.Web.Configuration.PagesSection.AutoEventWireup property:

Obtiene o establece un valor que indica si los eventos para páginas ASP.NET se conectan automáticamente a las funciones de gestión de eventos.

Cuando AutoEventWireup es true, manipuladores están obligados automáticamente a los eventos en tiempo de ejecución en función de su nombre y firma. Para cada evento, ASP.NET busca un método que se llame de acuerdo con el patrón Page_eventname(), como Page_Load() o Page_Init(). ASP.NET primero busca una sobrecarga que tenga la típica firma de controlador de eventos (es decir, especifica los parámetros Object y EventArgs). Si no se encuentra un controlador de eventos con esta firma, ASP.NET busca una sobrecarga que no tenga parámetros. Más detalles en this answer.

Si quisiera hacerlo de forma explícita que iba a escribir la siguiente vez

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

private void MyOnPostAuthenticateRequestHandler(object sender, EventArgs e) 
{ 
} 
+0

perdí una hora, ya que no estaba mostrando en Intellisense y pensé que podría tener que suscribirse al evento de alguna manera. Estaba a punto de publicar preguntando cómo implementar el evento, pero luego pensé en probarlo y ver si obtengo algún error y ¡listo! funcionó :) Gracias de todos modos – Tux

+6

ten en cuenta que es decir. Application_Start o Session_Start SOLAMENTE pueden manejarse a través del mecanismo de Auto Event Wireup, no hay eventos explícitos para ellos en la clase HttpApplication a los que puede suscribirse. –

+0

Gracias por dejarme saber eso. – Tux

Cuestiones relacionadas