using System; using System.Web; using System.Web.SessionState; namespace QTJZ { public class Filters : IHttpModule, IRequiresSessionState { public void Dispose() { } public void Init(HttpApplication application) { application.AcquireRequestState += new EventHandler(application_AcquireRequestState); } public void application_AcquireRequestState(object sender, EventArgs e) { HttpApplication application = sender as HttpApplication; HttpRequest request = application.Request; HttpResponse response = application.Response; string url=request.CurrentExecutionFilePath.Trim('/'); string suffix = request.CurrentExecutionFilePathExtension.Trim('.'); if (!url.Equals("Default.htm") && (suffix == "aspx" || suffix == "htm")) { object sessionObj = application.Context.Session == null ? null : application.Session["useID"]; if (sessionObj==null) { response.Redirect("~/Default.htm"); } } } } }
为了完成过滤的结果,Filters类须要完成IHttpMoeld接口,完成该接口须要有两个要领,一个是Dispose,另一个是Init。Init的参数是一个HttpApplication范例的实例,应用这个实例注册一些事宜。因为如今要对URL举行过滤,因而注册的是AcquireRequestState事宜。相似事宜排列以下
猎取要跳转的url可以用request的CurrentExecutionFilePath属性,而猎取要求文件的后缀可以用CurrentExecutionFilePathExtension,至于要按什么划定规矩来推断,按需求而定。我这里是在要求时推断Session是不是存在,不存在则跳转回上岸页面。因为要用到Session,翻开页面的时刻会抛出非常,非常信息是“会话状况在此高低文中不可用。”,在完成了IRequiresSessionState接口以后就没有非常抛出了。
另外,还须要在配置文件Web.config的 <system.web>节点下增加以下代码
<httpModules> <add name="filters" type="QTJZ.Filters"/> </httpModules>
个中type属性则是上面Filters类的完整限命名
更多ASP.NET中的URL过滤完成代码相干文章请关注ki4网!