ASP.NET底层机制 (上) HttpModule
2007-10-02 11:19
323 查看
1.ASP时代的HTTP请求处理过程
System.Web.SessionState.SessionStateModule;
System.Web.Security.WindowsAuthenticationModule;
System.Web.Security.FormsAuthenticationModule;
System.Web.Security.PassportAuthenticationModule;
System.Web.Security.UrlAuthorizationModule;
System.Web.Security.FileAuthorizationModule;
IHttpModule接口分析:
name可以随意指定,没有影响。
type有两个参数,第一个表示具体哪个类,第二个表示是哪个dll
不需要在Web项目添加对类库的引用,只是复制一份到bin目录下即可
于是该站点下的每个页面都会Response.Write两句话——这适合做广告,只要替换成javascript即可
5.HttpModule内部事件机制
HttpApplication实例有很多事件,BenginRequest和EndRequest分别是HttpModule容器最开始的和最后的事件
<httpModules>
<add name="Test1" type="ClassLibraryModule.MyHttpModule1,ClassLibraryModule1"></add>
<add name="Test2" type="ClassLibraryModule.MyHttpModule2,ClassLibraryModule2"></add>
</httpModules>
这时,根据add标签的先后,依次执行:
Test1.BeginRequest
Test2.BeginRequest
.....
Test1.EndRequest
Test2.EndRequest
利用HttpModule实现当满足一定条件时终止此次HttpRequest:
在BeginRequest事件中,使用HttpApplication.CompleteRequest()方法
在BeginRquest中终止,但是仍然会调用EndRequest事件,以及PreSendRequestHeaders事件和PreSendRequestContent事件——应该说直接跳转到EndRequest事件,而不会调用这期间的事件
如果有两个HttpModule,在第一个Module的BeginRequest中终止,仅仅不会调用第二个Module的BeginRequest,但仍然会调用两个EndRequest事件,以及PreSendRequestHeaders事件和PreSendRequestContent事件。
以上两句话,可以用下图来表示:
System.Web.SessionState.SessionStateModule;
System.Web.Security.WindowsAuthenticationModule;
System.Web.Security.FormsAuthenticationModule;
System.Web.Security.PassportAuthenticationModule;
System.Web.Security.UrlAuthorizationModule;
System.Web.Security.FileAuthorizationModule;
IHttpModule接口分析:
public interface IHttpModule //注意要在这个类库中添加System.Web引用 using System; using System.Web; namespace ClassLibraryModule <httpModules> <add name="Test" type="ClassLibraryModule.MyHttpModule,ClassLibraryModule"></add> </httpModules>
name可以随意指定,没有影响。
type有两个参数,第一个表示具体哪个类,第二个表示是哪个dll
不需要在Web项目添加对类库的引用,只是复制一份到bin目录下即可
于是该站点下的每个页面都会Response.Write两句话——这适合做广告,只要替换成javascript即可
5.HttpModule内部事件机制
HttpApplication实例有很多事件,BenginRequest和EndRequest分别是HttpModule容器最开始的和最后的事件
<httpModules>
<add name="Test1" type="ClassLibraryModule.MyHttpModule1,ClassLibraryModule1"></add>
<add name="Test2" type="ClassLibraryModule.MyHttpModule2,ClassLibraryModule2"></add>
</httpModules>
这时,根据add标签的先后,依次执行:
Test1.BeginRequest
Test2.BeginRequest
.....
Test1.EndRequest
Test2.EndRequest
利用HttpModule实现当满足一定条件时终止此次HttpRequest:
在BeginRequest事件中,使用HttpApplication.CompleteRequest()方法
public void Application_BeginRequest(Object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; HttpContext context = application.Context; application.CompleteRequest(); context.Response.StatusCode = 500; context.Response.StatusDescription = "Internal Server Error"; }
在BeginRquest中终止,但是仍然会调用EndRequest事件,以及PreSendRequestHeaders事件和PreSendRequestContent事件——应该说直接跳转到EndRequest事件,而不会调用这期间的事件
如果有两个HttpModule,在第一个Module的BeginRequest中终止,仅仅不会调用第二个Module的BeginRequest,但仍然会调用两个EndRequest事件,以及PreSendRequestHeaders事件和PreSendRequestContent事件。
以上两句话,可以用下图来表示:
相关文章推荐
- 转:ASP.NET底层机制 (上) HTTPModule
- ASP.NET底层机制 (上) HttpModule
- ASP.NET底层机制 (上) HttpModule[转载]
- Asp.Net底层解析(四)——应用程序生命周期与HttpModule
- 深入理解asp.net里的HttpModule机制
- 深入理解asp.net里的HttpModule机制
- 一:理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)
- 深入理解asp.net里的HttpModule机制
- 深入理解asp.net里的HttpModule机制
- 一:理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)
- 深入理解asp.net里的HttpModule机制
- 一:理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)
- ASP.NET底层机制 (下) HttpHandler
- ASP.NET底层机制 (下) HttpHandler 【转载】
- 深入理解asp.net里的HttpModule机制
- ASP.NET底层机制 (下) HttpHandler
- asp.net 运行机制初探(httpModule加载)
- ASP.Net 运行机制以及HttpModule和HttpHandler
- ASP.NET底层封装HttpModule实例---FormsAuthentication类的分析
- Asp.net 中HttpHandler,HttpModule,IHttpHandlerFactory的原理与应用(二)