zoukankan      html  css  js  c++  java
  • ASP.NET MVC 重点教程一周年版 第六回 过滤器Filter 【转】

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

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

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

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

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

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

    一、应用于Action的Filter


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

      public class TestFilter : ActionFilterAttribute
    {
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
    filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuting<br/>";
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
    filterContext.HttpContext.Session["temp"] += "TestFilter OnActionExecuted<br/>";
    }
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
    filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuting<br/>";
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
    filterContext.HttpContext.Session["temp"] += "TestFilter OnResultExecuted<br/>";
    }
    }

    然后建立一个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

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

    二、Controller的Filter

    将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 MVC在aspx中设置<%@ Page 的属性无法完成等同任务。)

            [ValidateInput(false)]
    public ActionResult Example()
    {
    return View();
    }

    八、ValidateAntiForgeryTokenAttribute

    用于验证服务器篡改。

            [ValidateAntiForgeryToken]
    public ActionResult Example()
    {
    return View();
    }
  • 相关阅读:
    cinder支持nfs快照
    浏览器输入URL到返回页面的全过程
    按需制作最小的本地yum源
    创建可执行bin安装文件
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    惠普IPMI登陆不上
    Linux进程状态——top,ps中看到进程状态D,S,Z的含义
    openstack-neutron基本的网络类型以及分析
    openstack octavia的实现与分析(二)原理,架构与基本流程
    flask上下文流程图
  • 原文地址:https://www.cnblogs.com/cxd4321/p/1565399.html
Copyright © 2011-2022 走看看