HttpModule是向实现类提供模块初始化和处置事件。当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之 路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获 的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。
1.首先你要实现IHttpModule接口这个接口只有两个方法,一个是Init方法一个Dispose方法.
2.在Init方法里边注册事件:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public void Init(HttpApplication context) 2 { 3 context.AcquireRequestState+=new EventHandler(OnRequest); 4 5 }
3.写注册事件的方法:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public void OnRequest(object source, EventArgs e) 2 { 3 4 HttpApplication application = source as HttpApplication;//得到Application 5 HttpContext context = application.Context;//得到请求上下文. 6 Uri url = context.Request.Url;//得到当前请求的URL 7 8 //请求Admin目录下的文件时,需要进行身份验证,只有管理员才能访问. 9 if (url.AbsolutePath.ToLower().StartsWith("/admin")) 10 { 11 //adminlogin.aspx和logout.aspx不需要身份验证 12 if (url.AbsolutePath.ToLower().EndsWith("adminlogin.aspx")) 13 { 14 return; 15 } 16 if (url.AbsolutePath.ToLower().EndsWith("loginout.aspx")) 17 { 18 return; 19 } 20 if (HttpContext.Current.Session["Name"] == null) 21 { 22 HttpContext.Current.Response.Redirect("adminlogin.aspx"); 23 } 24 25 26 } 27 }
4.配置web.config:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <httpModules> 2 <add name="CheckAdminModule" type="Web.Common.CheckAdminModule"/> 3 </httpModules>
这个方法很简单但是很使用。主要原理是在HttpModule里边进行了admin文件的过滤,在http访问过来的时候用HttpModule进行对session的验证如果session存在则通过,如果不存在侧直接跳转到登录页面。
程序中实现的方法有很多中。多总结一些对于提升自己的能力有很大的帮助。