zoukankan      html  css  js  c++  java
  • 结合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/

  • 相关阅读:
    《Windows编程循序渐进》——对话框应用程序2
    《Windows编程循序渐进》——对话框应用程序
    《Windows编程循序渐进》——建立MFC应用程序
    关于基类和子类构造函数的问题
    《Windows驱动开发技术详解》之分层驱动程序
    《Windows驱动开发技术详解》之驱动程序调用驱动程序——通过设备指针调用其他驱动程序
    《Windows驱动开发技术详解》之驱动程序调用驱动程序——以文件句柄形式调用其它驱动程序
    《Windows驱动开发技术详解》之定时器
    《Windows驱动开发技术详解》之自定义StartIO
    四种UNIX实现
  • 原文地址:https://www.cnblogs.com/outtamyhead/p/2950047.html
Copyright © 2011-2022 走看看