ASP.NET MVC 的Global.asax文件

文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

/*
* 该文件是网站全局配置文件,包含“全局应用程序事件”的“事件处理程序”。它相应“应用程序级别”和“会话级别事件”的代码。
* 运行时Global.asax文件将会被编译成为一个动态生成的.NET Framework类,该类是从HttpApplication基类派生的,
* 因此在Global.asax中的代码可以访问HttpApplication类中的所有Public或者Protected的成员,
* global.asax不被用户直接请求,但global.asax中的代码会被自动执行来响应特定的应用程序事件。
* global.asax是可选的,而且在一个web项目中是唯一的,它应该处于网站的根目录。
*/
namespace MVC
{
public class MvcApplication : System.Web.HttpApplication
{
/*其中的所有事件可以被分为两类:一种是满足特定的事件时才会被触发,另一种是每次请求都会被按照顺序执行*/
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);/*定义路由配置*/
BundleConfig.RegisterBundles(BundleTable.Bundles);
//不是每次请求都调用
//在Web应用程序的生命周期里就执行一次
//在应用程序第一次启动和应用程序域创建事被调用
//适合处理应用程序范围的初始化代码
}

void Application_End(object sender, EventArgs e)
{
//不是每次请求都调用
//在应用程序关闭时运行的代码,在最后一个HttpApplication销毁之后执行
//比如IIS重启,文件更新,进程回收导致应用程序转换到另一个应用程序域
}

void Session_Start(object sender, EventArgs e)
{
//不是每次请求都调用
//会话开始时执行
}

void Session_End(object sender, EventArgs e)
{
//不是每次请求都调用
//会话结束或过期时执行
//不管在代码中显式的清空Session或者Session超时自动过期,此方法都将被调用
}

void Application_Init(object sender, EventArgs e)
{
//不是每次请求都调用
//在每一个HttpApplication实例初始化的时候执行
}

void Application_Disposed(object sender, EventArgs e)
{
//不是每次请求都调用
//在应用程序被关闭一段时间之后,在.net垃圾回收器准备回收它占用的内存的时候被调用。
//在每一个HttpApplication实例被销毁之前执行
}

void Application_Error(object sender, EventArgs e)
{
//不是每次请求都调用
//所有没有处理的错误都会导致这个方法的执行
}


/*********************************************************************/
//每次请求都会按照顺序执行以下事件
/*********************************************************************/

void Application_BeginRequest(object sender, EventArgs e)
{
//每次请求时第一个出发的事件,这个方法第一个执行
}

void Application_AuthenticateRequest(object sender, EventArgs e)
{
//在执行验证前发生,这是创建验证逻辑的起点
}

void Application_AuthorizeRequest(object sender, EventArgs e)
{
//当安全模块已经验证了当前用户的授权时执行
}

void Application_ResolveRequestCache(object sender, EventArgs e)
{
//当ASP.NET完成授权事件以使缓存模块从缓存中为请求提供服务时发生,从而跳过处理程序(页面或者是WebService)的执行。
//这样做可以改善网站的性能,这个事件还可以用来判断正文是不是从Cache中得到的。
}

//------------------------------------------------------------------------
//在这个时候,请求将被转交给合适程序。例如:web窗体将被编译并完成实例化
//------------------------------------------------------------------------

void Application_AcquireRequestState(object sender, EventArgs e)
{
//读取了Session所需的特定信息并且在把这些信息填充到Session之前执行
}

void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
//在合适的处理程序执行请求前调用
//这个时候,Session就可以用了
}

//-------------------------------------------------
//在这个时候,页面代码将会被执行,页面呈现为HTML
//-------------------------------------------------

void Application_PostRequestHandlerExecute(object sender, EventArgs e)
{
//当处理程序完成对请求的处理后被调用。
}

void Application_ReleaseRequestState(object sender, EventArgs e)
{
//释放请求状态
}

void Application_UpdateRequestCache(object sender, EventArgs e)
{
//为了后续的请求,更新响应缓存时被调用
}

void Application_EndRequest(object sender, EventArgs e)
{
//EndRequest是在响应Request时最后一个触发的事件
//但在对象被释放或者从新建立以前,适合在这个时候清理代码
}

void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
//向客户端发送Http标头之前被调用
}

void Application_PreSendRequestContent(object sender, EventArgs e)
{
//向客户端发送Http正文之前被调用
}


}
}

执行顺序

以下过程由Internet Information Service(inetinfo.exe)(IIS)执行

  1. 客户端发出请求
  2. 验证请求
  3. 给请求授权
  4. 确定请求的缓存
  5. 获取缓存状态
  6. 在请求的处理程序执行前
  7. http处理程序执行请求 (asp.net页面由aspnet_wp.exe执行)
  8. 在请求的处理程序执行后
  9. 释放请求状态
  10. 更新请求缓存
  11. 请求结束

文章引用自博客园-积少成多

推荐文章