Cómo utilizar el archivo Global.asax en tu aplicación ASP.NET
El archivo Global.asax, a veces llamado archivo de aplicación ASP.NET, brinda una forma de responder a los eventos a nivel de aplicación o módulo en un único lugar centralizado. Puedes utilizar este archivo para implementar seguridad de aplicación, así como otras tareas. Veamos más de cerca cómo puedes utilizarlo en tus esfuerzos de desarrollo de aplicaciones.
Resumen
El archivo Global.asax se encuentra en el directorio raíz de la aplicación. Si bien Visual Studio .NET lo inserta automáticamente en todos los nuevos proyectos de ASP.NET, en realidad es un archivo opcional. Está bien eliminarlo si no lo estás utilizando. La extensión de archivo .asax indica que es un archivo de aplicación en lugar de un archivo ASP.NET que utiliza aspx.
El archivo Global.asax está configurado para rechazar automáticamente cualquier solicitud HTTP directa (a través de una URL), por lo que los usuarios no pueden descargar ni ver su contenido. El marco de trabajo de páginas de ASP.NET reconoce automáticamente cualquier cambio que se realice en el archivo Global.asax. El marco de trabajo reinicia la aplicación, lo que incluye cerrar todas las sesiones del navegador, limpiar toda la información de estado y reiniciar el dominio de la aplicación.
Programación
El archivo Global.asax, que se deriva de la clase HttpApplication, mantiene un pool de objetos HttpApplication y los asigna a las aplicaciones según sea necesario. El archivo Global.asax contiene los siguientes eventos:
- Application_Init: Se dispara cuando una aplicación se inicializa o se llama por primera vez. Se invoca para todas las instancias de objetos HttpApplication.
- Application_Disposed: Se dispara justo antes de que una aplicación se destruya. Este es el lugar ideal para limpiar los recursos utilizados previamente.
- Application_Error: Se dispara cuando se produce una excepción no controlada dentro de la aplicación.
- Application_Start: Se dispara cuando se crea la primera instancia de la clase HttpApplication. Te permite crear objetos que son accesibles para todas las instancias de HttpApplication.
- Application_End: Se dispara cuando se destruye la última instancia de la clase HttpApplication. Se dispara solo una vez durante la vida útil de una aplicación.
- Application_BeginRequest: Se dispara cuando se recibe una solicitud de aplicación. Es el primer evento que se dispara para una solicitud, que suele ser una solicitud de página (URL) que un usuario ingresa.
- Application_EndRequest: Es el último evento que se dispara para una solicitud de aplicación.
- Application_PreRequestHandlerExecute: Se dispara antes de que el marco de trabajo de páginas de ASP.NET comience a ejecutar un controlador de eventos como una página o un servicio web.
- Application_PostRequestHandlerExecute: Se dispara cuando el marco de trabajo de páginas de ASP.NET termina de ejecutar un controlador de eventos.
- Applcation_PreSendRequestHeaders: Se dispara antes de que el marco de trabajo de páginas de ASP.NET envíe encabezados HTTP a un cliente solicitante (navegador).
- Application_PreSendContent: Se dispara antes de que el marco de trabajo de páginas de ASP.NET envíe el contenido a un cliente solicitante (navegador).
- Application_AcquireRequestState: Se dispara cuando el marco de trabajo de páginas de ASP.NET obtiene el estado actual (estado de sesión) relacionado con la solicitud actual.
- Application_ReleaseRequestState: Se dispara cuando el marco de trabajo de páginas de ASP.NET completa la ejecución de todos los controladores de eventos. Esto hace que todos los módulos de estado guarden sus datos de estado actual.
- Application_ResolveRequestCache: Se dispara cuando el marco de trabajo de páginas de ASP.NET completa una solicitud de autorización. Permite a los módulos de almacenamiento en caché servir la solicitud desde la caché, evitando así la ejecución del controlador.
- Application_UpdateRequestCache: Se dispara cuando el marco de trabajo de páginas de ASP.NET completa la ejecución del controlador para permitir que los módulos de almacenamiento en caché almacenen las respuestas para su uso en el manejo de solicitudes posteriores.
- Application_AuthenticateRequest: Se dispara cuando el módulo de seguridad ha establecido la identidad del usuario actual como válida. En este punto, las credenciales del usuario se han validado.
- Application_AuthorizeRequest: Se dispara cuando el módulo de seguridad ha verificado que un usuario puede acceder a los recursos.
- Session_Start: Se dispara cuando un nuevo usuario visita el sitio web de la aplicación.
- Session_End: Se dispara cuando la sesión de un usuario caduca, finaliza o cuando abandona el sitio web de la aplicación.
La lista de eventos puede parecer abrumadora, pero puede ser útil en varias circunstancias.
Un problema clave para aprovechar los eventos es conocer el orden en que se desencadenan. Los eventos Application_Init y Application_Start se disparan una vez cuando se inicia la aplicación por primera vez. De manera similar, los eventos Application_Disposed y Application_End solo se disparan una vez cuando la aplicación finaliza. Además, los eventos basados en sesiones (Session_Start y Session_End) solo se utilizan cuando los usuarios ingresan y abandonan el sitio. Los eventos restantes tratan las solicitudes de la aplicación y se desencadenan en el siguiente orden:
Cómo utilizar la colección en Visual Basic 6: Guía completa- Application_BeginRequest
- Application_AuthenticateRequest
- Application_AuthorizeRequest
- Application_ResolveRequestCache
- Application_AcquireRequestState
- Application_PreRequestHandlerExecute
- Application_PreSendRequestHeaders
- Application_PreSendRequestContent
- <<el código se ejecuta>>
- Application_PostRequestHandlerExecute
- Application_ReleaseRequestState
- Application_UpdateRequestCache
- Application_EndRequest
Un uso común de algunos de estos eventos es la seguridad. El siguiente ejemplo en C# demuestra varios eventos de Global.asax, con el evento Application_Authenticate utilizado para facilitar la autenticación basada en formularios mediante una cookie. Además, el evento Application_Start pobla una variable de aplicación, mientras que el evento Session_Start pobla una variable de sesión. El evento Application_Error muestra un mensaje simple que indica que se ha producido un error.
protected void Application_Start(Object sender, EventArgs e) { Application["Title"] = "Ejemplo de Builder.com"; } protected void Session_Start(Object sender, EventArgs e) { Session["startValue"] = 0; } protected void Application_AuthenticateRequest(Object sender, EventArgs e) { // Extrae la cookie de autenticación de formularios string cookieName = FormsAuthentication.FormsCookieName; HttpCookie authCookie = Context.Request.Cookies[cookieName]; if (authCookie == null) { // No hay cookie de autenticación return; } FormsAuthenticationTicket authTicket = null; try { authTicket = FormsAuthentication.Decrypt(authCookie.Value); } catch (Exception ex) { // Registra los detalles de la excepción (omitido por simplicidad) return; } if (authTicket == null) { // Error al descifrar la cookie return; } // Cuando se creó el ticket, se asignó a UserData una cadena de nombres de roles separados por "|" string[] roles = authTicket.UserData.Split('|'); // Crea un objeto Identity FormsIdentity id = new FormsIdentity(authTicket); // Este principal se mantendrá durante toda la solicitud GenericPrincipal principal = new GenericPrincipal(id, roles); // Asocia el nuevo objeto principal con el objeto HttpContext actual Context.User = principal; } protected void Application_Error(Object sender, EventArgs e) { Response.Write("Se ha producido un error."); }
El ejemplo anterior nos muestra la utilidad de los eventos contenidos en el archivo Global.asax; es importante tener en cuenta que estos eventos se relacionan con toda la aplicación. En consecuencia, cualquier método colocado en él está disponible en el código de la aplicación, de ahí el nombre Global.
A continuación, se muestra el equivalente en VB.NET del código anterior:
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) Application("Title") = "Ejemplo de Builder.com" End Sub Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) Session("startValue") = 0 End Sub Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) ' Extrae la cookie de autenticación de formularios Dim cookieName As String = FormsAuthentication.FormsCookieName Dim authCookie As HttpCookie = Context.Request.Cookies(cookieName) If authCookie Is Nothing Then ' No hay cookie de autenticación Return End If Dim authTicket As FormsAuthenticationTicket = Nothing Try authTicket = FormsAuthentication.Decrypt(authCookie.Value) Catch ex As Exception ' Registra los detalles de la excepción (omitido por simplicidad) Return End Try If authTicket Is Nothing Then ' Error al descifrar la cookie Return End If Dim roles(2) As String roles(0) = "Uno" roles(1) = "Dos" Dim id As FormsIdentity = New FormsIdentity(authTicket) Dim principal As GenericPrincipal = New GenericPrincipal(id, roles) ' Asocia el nuevo objeto principal al objeto HttpContext actual Context.User = principal End Sub Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) Response.Write("Se ha producido un error.") End Sub
Un buen recurso
El archivo Global.asax es el punto central de las aplicaciones ASP.NET. Proporciona numerosos eventos para manejar diversas tareas de la aplicación, como la autenticación de usuarios, el inicio de la aplicación y el manejo de sesiones de usuario. Debes estar familiarizado con este archivo opcional para construir aplicaciones robustas basadas en ASP.NET.
Cuándo usar la palabra clave volatile en Java para controlar el acceso a datos en hilosEn Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo utilizar el archivo Global.asax en tu aplicación ASP.NET , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados