結合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");

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM