• 结合EF5.0讲MVC4(三)为我们的程序添加过滤器


    本节导航

      1、过滤器介绍

      2、创建自己的过滤器

      进入目录   下载源码   下载视频

    1、过滤器介绍

      要使用过滤器,我们的过滤器类需要继承ActionFilterAttribute抽象类。

      在我们的过滤器类里需要重写(override)OnActionExecuting(ActionExecutingContext filterContext)和OnActionExecuted(ActionExecutedContext filterContext)

      过滤器的作用在于:判断用户登录和权限、动态Action、防篡改等等。

    2、创建自己的过滤器

      我们创建的这个过滤器的作用主要是用来记录日志,所以在开始之前,我们需要在【Models】文件夹下新建一个名为OperLog的类,类的内容如下

    public class OperLog
        {
            public int OperLogID { get; set; }
            public string ControllerName { get; set; }
            public string ActionName { get; set; }
            public string IpAddress { get; set; }
        }

      然后在【Dal】文件夹下的MovieContext类中加入

    public DbSet<OperLog> OperLog { get; set; }

      接下来,找到【Filters】文件夹,在里面新建类:MyFilter。并集成ActionFilterAttribute抽象类,然后重写上面提到的两个方法。我们看完整的MyFilter代码

    public class MyFilter:ActionFilterAttribute
        {
            MovieContext db = new MovieContext();
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                //base.OnActionExecuting(filterContext);
                OperLog ol = new OperLog()
                {
                    ControllerName=filterContext.Controller.ToString(),
                    ActionName=filterContext.ActionDescriptor.ActionName,
                    IpAddress=filterContext.HttpContext.Request.UserHostAddress
                };
                db.OperLog.Add(ol);
                db.SaveChanges();
            }
    
            public override void OnActionExecuted(ActionExecutedContext filterContext)
            {
               // base.OnActionExecuted(filterContext);
            }
        }

      不难看出,我们想要得到的是在Action执行的时候,获取到控制器名称、方法名以及客户端的Ip地址,然后保存到OperLog这张表中。

      为了我们方便的查看日志,我想在页面上添加一个入口,因此,我要添加关于OperLog的控制器同时生成了5个页面。然后在_Laout中添加menu菜单,指向OperLogController的Index。

      那么我们的过滤器要怎么用呢?很简单,只要将过滤器类当做类属性或者方法属性就可以了。比如我要记录我对Movie的操作,那么我要做的工作是在MovieController类前或者方法前加上[MyFilter]即可,如下代码:

       或者在MovieController上加上这句话。我这示例中把MyFilter放在了Moviecontroller上,用来检测所有的Action的执行。那么执行的效果如图

      

      还有更多的关于过滤器的使用方法,这里的这篇文章就当抛砖引玉吧。

      更:2013/3/8

      如果你写的过滤器是一个全局过滤器的话,可以这样写。在【App_Start】文件夹下找到FilterConfig文件并打开,将我们的过滤器添加到全局过滤器集合中就可以了。那么我们的任何操作都会被记录下来。

      

      更:2013/9/5

      

      在设置了全局过滤器之后,也有可能遇到有些Controller例外的情况。比如情景:开发人员通过Session判断是否登录超时,那么这里就需要用到全局过滤器,但是我们的登录controller:Account不需要执行这个过滤器。那么这个全局过滤器要这样写:

      

      同时,我们需要在超时之后跳转到登录页面,这里这样写:

      

    filterContext.Result = new RedirectResult("/Account/Login");

      




    文章作者:禁止吸烟

    道本无话可说,皆当全力以赴。

    博客地址:http://www.cnblogs.com/outtamyhead/

  • 相关阅读:
    ZigBee开发(2)--基础实验LED
    ZigBee开发(1)--开发环境搭建
    day12 -- 函数递归、生成式、匿名函数和常用内置函数
    day11 -- 函数进阶之闭包、装饰器
    day10 -- 函数对象、函数名称空间和作用域
    day09 -- 函数基础之函数的定义、返回值以及函数的参数
    day08 -- 文件的光标控制、内容监测,修改及其他模式
    上海dd -- Python2 与Python3 的区别(待更新)
    上海day7--字符编码和文件的基本操作类型
    上海day6 ---- 列表、元组、字典和集合
  • 原文地址:https://www.cnblogs.com/outtamyhead/p/2950047.html
Copyright © 2020-2023  润新知