Asp.net mvc自定義Filter簡單使用

 自定義Filter的基本思路是繼承基類ActionFilterAttribute,並根據實際須要重寫OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted這四個中的一個或多個方法。html

  注意類名必定要以Attribute結尾。微信

  故名思義,Action執行前,執行後,結果返回前,結果返回後。因此它們的執行前後順序就是OnActionExecuting,OnActionExecuted,Action,OnResultExecuting,OnResultExecuted。mvc

  如下是我我的在工做中的兩處實際用法分享。asp.net

 1、重寫OnActionExecuting,限制請求來源。ide

  利用最近在作微信企業號應用開發。過程當中需對全部請求來源限制爲只能是微信客戶端。應用是基於asp.net mvc作的,因此第一反應就是藉助filter過濾器實現。spa

  在App_Start文件夾下新建類OutOfWeiXinAttribute,並繼承ActionFilterAttribute,而後重寫OnActionExecuting方法。經過 Request.UserAgent中是否包含micromessenger字符標識判斷請求是否來自微信客戶端,最後經過filterContext.Result設置自定義返回結果。.net

class="code_img_closed" src="/Upload/Images/2015050417/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('68f63e7d-72bc-4a61-a6ce-c3a92d8609fa',event)" src="/Upload/Images/2015050417/2B1B950FA3DF188F.gif" alt="" />調試

 1 /// <summary>  2 /// 防止應用程序在微信之外的地方打開  3 /// </summary>  4 public class OutOfWeiXinAttribute : ActionFilterAttribute  5  {  6 public override void OnActionExecuting(ActionExecutingContext filterContext)  7  {  8 string userAgent = filterContext.RequestContext.HttpContext.Request.UserAgent.ToLower();  9 10 LogHelper<OutOfWeiXinAttribute>.Debug("userAgent:" + userAgent); 11 var isWeixin = userAgent.IndexOf("micromessenger") != -1; 12 13 //如下代碼只會在調試時執行 14 #if DEBUG 15 isWeixin = true; 16 #endif 17 // 18 19 if (!isWeixin) 20  { 21 ViewResult view = new ViewResult(); 22 view.ViewName = "OutofWeixinApp"; 23 filterContext.Result = view; 24  } 25 else 26  { 27 base.OnActionExecuting(filterContext); 28  } 29 30  } 31 }

自定義Filter日誌

  在須要作此限制的Controller或者Action上直接寫上[OutOfWeiXin]就實現了想要的功能。code

  #if DEBUG

  coding..

  #endif

  其中的coding 部分只有在調試環境下才會執行,因此能夠用來方便調試使用。

  2、重寫OnActionExecuted,統一處理拋出的異常

  重寫OnActionExecuted,判斷filterContext.Exception是否爲空,便可找到異常。設置filterContext.ExceptionHandled = true;

  返回結果filterContext.Result = view;就完成了統一處理異常。

  

 1 /// <summary>  2 /// 捕獲全局異常  3 /// </summary>  4 public class LoggingFilterAttribute :ActionFilterAttribute  5  {  6 public override void OnActionExecuted(ActionExecutedContext filterContext)  7  {  8 if (filterContext.Exception != null)  9  { 10 //發送郵件並記錄異常日誌 11 LogHelper<LoggingFilterAttribute>.SendEmaiAndLogError(filterContext.Exception); 12 13 filterContext.Canceled = true; 14 filterContext.ExceptionHandled = true; 15 ViewResult view = new ViewResult(); 16 view.ViewName = "Error"; 17 filterContext.Result = view; 18  } 19 20 base.OnActionExecuted(filterContext); 21  } 22 }

自定義Filter處理全局異常

  在須要應用的Controller或Action上寫上[HandleError,LoggingFilter]就能夠了。

相關文章
相關標籤/搜索