ASP.NET Tutorial/ASP.Net Instroduction/Global.asax

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Appication level event handlers in global.asax

   <source lang="csharp">

<script language="VB" runat="server">

  Sub Application_Start(Sender as Object, e as EventArgs)
     Application("Time") = System.DateTime.Now
  End Sub
  Sub Application_AcquireRequestState(Sender as Object, e as EventArgs)
     Response.Write("Acquiring request session state" & "...
") End Sub Sub Application_AuthenticateRequest(Sender as Object, e as EventArgs) Response.Write("Authenticating request...
") End Sub Sub Application_AuthorizeRequest(Sender as Object, e as EventArgs) Response.Write("Authorizing request...
") End Sub Sub Application_PostRequestHandlerExecute(Sender as Object, e as EventArgs) Response.Write("Request handler executed...
") End Sub Sub Application_PreRequestHandlerExecute(Sender as Object, e as EventArgs) Response.Write("Request handler executed...
") End Sub Sub Application_PreSendRequestContent(Sender as Object, e as EventArgs) Response.Write("Receiving request content...
") End Sub Sub Application_PreSendRequestHeaders(Sender as Object, e as EventArgs) Response.Write("Receiving request headers...
") End Sub Sub Application_ReleaseRequestState(Sender as Object, e as EventArgs) Response.Write("Releasing request state...
") End Sub Sub Application_ResolveRequestCache(Sender as Object, e as EventArgs) Response.Write("Resolving request cache...
") End Sub Sub Application_UpdateRequestCache(Sender as Object, e as EventArgs) Response.Write("Updating request cache...
") End Sub Sub Application_Error(Sender as Object, e as EventArgs) Response.Write(Sender.Request.isAuthenticated & " is authenticating request...
") End Sub Sub Session_Start(Sender as Object, e as EventArgs) Response.Write("Session is starting...
") End Sub Sub Application_BeginRequest(Sender as Object, e as EventArgs) Response.Write("Process") Response.Write("Request is starting...
") End Sub Sub Application_EndRequest(Sender as Object, e as EventArgs) Response.Write("Request is ending...
") End Sub

</script></source>


Application level action sequence

   <source lang="csharp">

<%@ Application Language="C#" %> <script runat="server">

   void Application_Start(Object sender, EventArgs e) {
   }
   protected void Application_OnEndRequest()
   {
Response.Write("
This page was served at " +DateTime.Now.ToString());
   }
   protected void Application_Error(Object sender, EventArgs e)
   {
       Response.Write("");
Response.Write("Oops! Looks like an error occurred!!
");
       Response.Write("");
       Response.Write(Server.GetLastError().Message.ToString());
Response.Write("
" + Server.GetLastError().ToString());
       Server.ClearError();
   }
   void Session_Start(Object sender, EventArgs e) {
   }
   void Session_End(Object sender, EventArgs e) {
   }
      

</script></source>


Global application file. (C#)

   <source lang="csharp">

Use this file to define global variables. React to global events (such as when a web application first starts). <%@ Application Language="C#" %> <script runat="server">

   protected void Application_OnEndRequest()
   {
Response.Write("
This page was served at " +
        DateTime.Now.ToString());
   }
      

</script></source>


Global.asax file can be used to track the number of page requests made for any page.

   <source lang="csharp">

File: Global.asax <%@ Application Language="C#" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <%@ Import Namespace="System.Web.Configuration" %> <script runat="server">

   private string _conString;
   private SqlConnection _con;
   private SqlCommand _cmdSelect;
   private SqlCommand _cmdInsert;
   public override void Init()
   {
       _conString = WebConfigurationManager.ConnectionStrings["Log"]. ConnectionString;
       _con = new SqlConnection(_conString);
       _cmdSelect = new SqlCommand("SELECT COUNT(*) FROM Log WHERE Path=@Path", _con);
       _cmdSelect.Parameters.Add("@Path", SqlDbType.NVarChar, 500);
       _cmdInsert = new SqlCommand("INSERT Log (Path) VALUES (@Path)", _con);
       _cmdInsert.Parameters.Add("@Path", SqlDbType.NVarChar, 500);
   }
   public int NumberOfRequests
   {
       get
       {           
          int result = 0;
          _cmdSelect.Parameters["@Path"].Value = Request. AppRelativeCurrentExecutionFilePath;
          try
          {
              _con.Open();
              result = (int)_cmdSelect.ExecuteScalar();
          }
          finally
          {
              _con.Close();
          }
          return result;
       }
   }
   void Application_BeginRequest(object sender, EventArgs e)
   {
       _cmdInsert.Parameters["@Path"].Value = Request. AppRelativeCurrentExecutionFilePath;
       try
       {
           _con.Open();
           _cmdInsert.ExecuteNonQuery();
       }
       finally
       {
           _con.Close();
       }
   }

</script></source>


Log exception in Global.asax (C#)

   <source lang="csharp">

using System; using System.Collections; using System.ruponentModel; using System.Web; using System.Web.SessionState; namespace MyApp {

 public class Global : System.Web.HttpApplication
 {
   protected void Application_Error(Object sender, EventArgs e)
   {
     System.Diagnostics.EventLog myEventLog;
     Exception ex=Server.GetLastError();
     myEventLog=new System.Diagnostics.EventLog();
     myEventLog.Log="Application";
     myEventLog.Source="Default";
     myEventLog.WriteEntry(ex.ToString());
     myEventLog=null;
   }
 }

}</source>


Log exception in Global.asax (VB)

   <source lang="csharp">

Imports System.Web Imports System.Web.SessionState Public Class Global Inherits System.Web.HttpApplication

   Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
       Dim myEventLog As System.Diagnostics.EventLog
       Dim ex As Exception = Server.GetLastError()
       myEventLog = New System.Diagnostics.EventLog()
       myEventLog.Log = "Application"
       myEventLog.Source = "Default"
       myEventLog.WriteEntry(ex.ToString())
   End Sub

End Class</source>


Override string GetVaryByCustomString in Global.asax (C#)

   <source lang="csharp">

<%@ Application Language="C#" %> <script runat="server">

   public override string GetVaryByCustomString(HttpContext context, string arg)
   {
       if (arg.ToLower() == "prefs ")
       {
           HttpCookie cookie = context.Request.Cookies["Language"];
           if (cookie != null)
           {
               return cookie.Value;
           }
       }
       return base.GetVaryByCustomString(context, arg);
   }
   void Application_Start(object sender, EventArgs e) 
   {
       // Code that runs on application startup
   }
   
   void Application_End(object sender, EventArgs e) 
   {
       //  Code that runs on application shutdown
   }
       
   void Application_Error(object sender, EventArgs e) 
   { 
       // Code that runs when an unhandled error occurs
   }
   void Session_Start(object sender, EventArgs e) 
   {
       // Code that runs when a new session is started
   }
   void Session_End(object sender, EventArgs e) 
   {
   }
      

</script></source>


Override string GetVaryByCustomString in Global.asax (VB)

   <source lang="csharp">

<%@ Application Language="VB" %> <script runat="server">

   Overrides Function GetVaryByCustomString(ByVal context As HttpContext, _
           ByVal arg As String) As String
       If arg.ToLower() = "prefs" Then
           Dim cookie As HttpCookie = context.Request.Cookies("Language")
           If cookie IsNot Nothing Then
               Return cookie.Value
           End If
       End If
       Return MyBase.GetVaryByCustomString(context, arg)
   End Function
   Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
       " Code that runs on application startup
   End Sub
   
   Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
       " Code that runs on application shutdown
   End Sub
       
   Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
       " Code that runs when an unhandled error occurs
   End Sub
   Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
       " Code that runs when a new session is started
   End Sub
   Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
       " Code that runs when a session ends. 
       " Note: The Session_End event is raised only when the sessionstate mode
       " is set to InProc in the Web.config file. If session mode is set to StateServer 
       " or SQLServer, the event is not raised.
   End Sub
      

</script></source>


Some events don"t fire with every request:

   <source lang="csharp">

Start() is invoked when the application first starts up. Start() is invoked each time a new session begins. Error() is invoked whenever an unhandled exception occurs in the application. End() is invoked whenever the user"s session ends. End() is invoked just before an application ends. Disposed() is invoked after the application has been shut down.</source>


Static application variables

   <source lang="csharp">

File: Global.asax <%@ Application Language="C#" ClassName="Global" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Collections.Generic" %> <script runat="server">

   private static string[] fileList;
   public static string[] FileList
   {
       get
       {
           if (fileList == null)
           {
               fileList = Directory.GetFiles(HttpContext.Current.Request.PhysicalApplicationPath);
           }
           return fileList;
       }
   }
   private static Dictionary<string, string> metadata = new Dictionary<string, string>();
   public void AddMetadata(string key, string value)
   {
       lock (metadata)
       {
           metadata[key] = value;
       }
   }
   public string GetMetadata(string key)
   {
       lock (metadata)
       {
           return metadata[key];
       }
   }

</script>

File: Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="StaticApplicationVariables" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Untitled Page</title>

</head> <body>

   <form id="form1" runat="server">
       <asp:Label ID="lblInfo" runat="server"></asp:Label>
   
   </form>

</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; using ASP; public partial class StaticApplicationVariables : System.Web.UI.Page {

   protected void Page_Load(object sender, EventArgs e)
   {
   StringBuilder builder = new StringBuilder();
   foreach (string file in Global.FileList)
   {
     builder.Append(file + "
"); } lblInfo.Text = builder.ToString(); }

}</source>


The global.asax Application File

   <source lang="csharp">

The global application class that"s used by the global.asax file should always be stateless. You can handle two types of events in the global.asax file: Events that always occur for every request. Events that occur only under certain conditions. BeginRequest() called at the start of every request, including requests for files that aren"t web forms. AuthenticateRequest() called before authentication is performed. AuthorizeRequest() assigns special privileges. ResolveRequestCache() is used in conjunction with output caching. AcquireRequestState() is called before session-specific information is retrieved for the client. PreRequestHandlerExecute() is called before the appropriate HTTP handler executes the request. PostRequestHandlerExecute() is called just after the request is handled. ReleaseRequestState() is called when the session-specific information is about to be serialized from the Session collection. UpdateRequestCache() is called before information is added to the output cache. EndRequest() is called at the end of the request.</source>