6.过滤器Filter

来源:互联网 发布:网络控制云台 编辑:程序博客网 时间:2024/06/08 05:42

 Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能


  1. 判断登录与否或用户权限
    决策输出缓存
    防盗链
    防蜘蛛
    本地化与国际化设置
    实现动态Action

Filter是一种声明式编程方式,Asp.net MVC中它只能限制于Action(或它的Controller)。
Filter
要继承于ActionFilterAttribute抽象类,并可以覆写void OnActionExecuting(ActionExecutingContext)
void OnActionExecuted(ActionExecutedContext)

以及void OnResultExecuting(ResultExecutingContext)
void OnResultExecuted(ResultExecutedContext)

OnActionExecutingAction执行前的操作,OnActionExecuted则是Action执行后的操作

OnResultExecuting是解析ActionResult前执行,OnResultExecuted是解析ActionResult后执行。

一、应用于ActionFilter


下面我给大家一个示例,来看看它的的执行顺序
首先我们先建立 一个Filter,名字叫做TestFilter

  public class TestFilter : ActionFilterAttribute

    {

        public override void OnActionExecuting(ActionExecutingContext filterContext)

        {

            filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuting
";

        }

 

        public override void OnActionExecuted(ActionExecutedContext filterContext)

        {

            filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuted
";

        }

        public override void OnResultExecuting(ResultExecutingContext filterContext)

        {

            filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuting
";

        }

 

        public override void OnResultExecuted(ResultExecutedContext filterContext)

        {

            filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuted
";

        }

    }

然后建立一个Action

        [TestFilter]//将此Filter应用于Action

        public ActionResult filteraction()

        {

            return View();

        }

 

在它的View中写入:

<%Session["temp"] += "View Execute<br/>"; %>

 

最后在其它页面得到Session["temp"]的输出结果:

TestFilter OnActionExecuting

TestFilter OnActionExecuted

TestFilter OnResultExecuting

View Execute

TestFilter OnResultExecuted

由此可得到它们的执行顺序也是如上

 

二、ControllerFilter

Filter应用在Controller上有2种方式

1.直接将Filter应用在Controller上,如:

    [TestFilter]

    public class EiceController : Controller

    {

     }

 

2.重写Controller内的
OnActionExecuting/OnActionExecuted/OnResultExecuting/OnResultExecuted
的四个方法。

下面我们说几个系统的Filter

三、AcceptVerbs

规定页面的访问形式,如

        [AcceptVerbs(HttpVerbs.Post)]

         public ActionResult Example(){

             return View();

         }


页面只能以Post形式访问,即表单提交。

四、ActionName

规定Action的名称。

应用场景:如果不想用方法名做为Action名,或Action名为关键字的话,如

       [ActionName("class")]

         public ActionResult Example(){

             return View();

         }

 

五、NonAction

当前方法仅是普通方法不解析为Action

六、OutputCache

Action添加缓存

        [OutputCache(Duration = 60, VaryByParam = "*")]

        public ActionResult Example()

        {

            return View();

        }

 

七、ValidateInput

Action可以接受Html等危险代码(ASP.NET MVCaspx中设置<%@ Page 的属性无法完成等同任务。)

        [ValidateInput(false)]

        public ActionResult Example()

        {

            return View();

        }

 

八、ValidateAntiForgeryTokenAttribute

用于验证服务器篡改。

        [ValidateAntiForgeryToken]

        public ActionResult Example()

        {

            return View();

        }

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq把微信冻结了怎么办 微信给封号了怎么办 微信久了没登录冻结了怎么办 换手机号了微店怎么办 ai文件置入后都是字怎么办 excel加载项被禁用了怎么办 被期刊网骗了怎么办 发表的文章不想被收录怎么办? 农村长说的眼睛害了怎么办 普通党员不认同领导的决定怎么办 大学读不下去了怎么办 教师因病长期不能上班怎么办 长按win键黑屏了怎么办 巡视组巡视出问题后续怎么办 货运资格证两次没继续教育怎么办 电子注册备案表学信网查不到怎么办 学信网学籍档案没照片怎么办 信访局不给答复怎么办 发票跳了一个号怎么办 报税用的ca证书怎么办 报税u盘丢了怎么办 地税ca证书丢了怎么办 深圳ca证书丢了怎么办 武汉国税报税证书过期怎么办 江苏大学专业选修课挂了怎么办 电信翼企享福卡怎么办 教育部学籍在线验证报告过期怎么办 身份证被别人注册了学信网怎么办 大专文凭查不到学籍该怎么办 学信网上查不到学历怎么办 学信网上没有学历照片怎么办 学信网上没照片怎么办 学历认证报告丢了怎么办 学历认证弄丢了怎么办 手机系统安全证书有问题怎么办 台式电脑的浏览器证书出错怎么办 网上银行k宝密码忘了怎么办 工行证书介质已被锁定怎么办 学历认证是假的怎么办 怕被公司查学历怎么办 淘宝玩具没有怎么办3c