2015年12月24日 星期四

[MVC] 使用ActionFilterAttribute 紀錄Log

假設當Client發出一個搜尋的Request,我們希望可以在紀錄使用者搜尋的關鍵字,以便日後可以統計…

這個需求就可以利用ActionFilterAttribute來完成,首先先看下面進如Action的簡易流程示意圖 :


圖片出處

 
圖中說明當在進入Controller 的Action前會先經過Filter.OnActionExcuting,在Action結束後也會經過Filter.OnActionExecuted方法,因此我們就可以在不影響Action本身邏輯的情況下,做到紀錄的功能,這也是AOP的觀念。

作法 :
1.新增一個Class繼承 ActionFilterAttributte,接著實做OnActionexecutxxxx的方法即可
2.簡易範例如下 :

public class SearchLogAttribute : ActionFilterAttribute
   { 
       public override void OnActionExecuting(ActionExecutingContext filterContext)
       {
           base.OnActionExecuting(filterContext);
 
           // 讀取搜尋資訊
           string controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
           var param =  filterContext.ActionParameters;
 
           // TODO 存取紀錄
       }
   }

沒有留言:

張貼留言