博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET的URL过滤
阅读量:4549 次
发布时间:2019-06-08

本文共 2480 字,大约阅读时间需要 8 分钟。

最近做的一个Web项目需要对URL进行过滤,在网上搜了一下,知道J2EE有个Filter的东西,而在.NET方面,其实也可以实现。

下面是类的定义。

1 using System; 2 using System.Web; 3 using System.Web.SessionState; 4  5 namespace QTJZ 6 { 7     public class Filters : IHttpModule, IRequiresSessionState 8     { 9         public void Dispose() { }10 11         public void Init(HttpApplication application)12         {13             application.AcquireRequestState += new EventHandler(application_AcquireRequestState);14         }15 16         public void application_AcquireRequestState(object sender, EventArgs e)17         {18             HttpApplication application = sender as HttpApplication;19             HttpRequest request = application.Request;20             HttpResponse response = application.Response;21 22             string url=request.CurrentExecutionFilePath.Trim('/');23             string suffix = request.CurrentExecutionFilePathExtension.Trim('.');24 25             if (!url.Equals("Default.htm") && (suffix == "aspx" || suffix == "htm"))26             {27                 object sessionObj = application.Context.Session == null ? null : application.Session["useID"];28                 if (sessionObj==null)29                 {30                     response.Redirect("~/Default.htm");31                 }32             }33         }34     }35 }

为了实现过滤的效果,Filters类需要实现IHttpMoeld接口,实现该接口需要有两个方法,一个是Dispose,另一个是Init。Init的参数是一个HttpApplication类型的实例,利用这个实例注册一些事件。由于现在要对URL进行过滤,因此注册的是AcquireRequestState事件。类似事件罗列如下

BeginRequest 在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生。
AuthenticateRequest 当安全模块已建立用户标识时发生。
AuthorizeRequest 当安全模块已验证用户授权时发生。
ResolveRequestCache

在 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务后发生,

从而绕过事件处理程序(例如某个页或 XML Web services)的执行。

AcquireRequestState 当 ASP.NET 获取与当前请求关联的当前状态(如会话状态)时发生。
PreRequestHandlerExecute 恰好在 ASP.NET 开始执行事件处理程序(例如,某页或某个 XML Web services)前发生。
PostRequestHandlerExecute 在 ASP.NET 事件处理程序(例如,某页或某个 XML Web service)执行完毕时发生。
ReleaseRequestState 在 ASP.NET 执行完所有请求事件处理程序后发生。 该事件将使状态模块保存当前状态数据。
UpdateRequestCache 当 ASP.NET 执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。
EndRequest 在 ASP.NET 响应请求时作为 HTTP 执行管线链中的最后一个事件发生。

获取要跳转的url可以用request的CurrentExecutionFilePath属性,而获取请求文件的后缀可以用CurrentExecutionFilePathExtension,至于要按什么规则来判断,按需求而定。我这里是在请求时判断Session是否存在,不存在则跳转回登陆页面。由于要用到Session,打开页面的时候会抛出异常,异常信息是“会话状态在此上下文中不可用。”,在实现了IRequiresSessionState接口之后就没有异常抛出了。

此外,还需要在配置文件Web.config的 <system.web>节点下添加如下代码

其中type属性则是上面Filters类的完全限定名

转载于:https://www.cnblogs.com/HopeGi/archive/2013/01/20/2867911.html

你可能感兴趣的文章
数字基带信号分类
查看>>
移动HTML5前端性能优化指南(转)
查看>>
Jq 遍历each()方法
查看>>
Android源码分析:Telephony部分–phone进程
查看>>
关于 redis.properties配置文件及rule
查看>>
WebService
查看>>
关于Java中重载的若干问题
查看>>
Java中start和run方法的区别
查看>>
23种设计模式中的命令模式
查看>>
[转载]年薪10w和年薪100w的人,差在哪里?
查看>>
shell 日期参数
查看>>
尼姆游戏(吃花生米问题)
查看>>
最小瓶颈路
查看>>
PHP isset()与empty()的使用区别详解
查看>>
Android自定义控件(五)自定义Dialog QuickOptionDialog
查看>>
初学java之面板布局的控制
查看>>
简单的验证码识别(opecv)
查看>>
一款基于jQuery的图片分组切换焦点图插件
查看>>
Python学习-字符串函数操作3
查看>>
MySQL存储二进制数据
查看>>