一.背景
過濾器(Filters)的出現使得我們可以在ASP.NET MVC程式裡更好的控制浏覽器請求過來的URL,不是每個請求都會響應内容,隻響應特定内容給那些有特定權限的使用者,過濾器理論上有以下功能:
判斷登入與否或使用者權限
決策輸出緩存
防盜鍊
防蜘蛛
本地化與國際化設定
實作動态Action(做權限管理系統的好東西)
二.簡介
1.MVC4提供了四種過濾器
分别是: 身份驗證過濾器,行為過濾器,結果過濾器,異常過濾器
分别要實作:AuthorizeAttribute,ActionFilterAttribute,ActionFilterAttribute,HandleErrorAttribute
分别要重寫:OnAuthorization,OnAcitonExecuting OnActionExecuted, OnResultExecuting OnResultExecuted,OnException
2. 使用方式有兩種
A.自定義類繼承自相應的類或接口,重寫方法,作為特性使用
注:
使用方式一:作為Controller或Action的特性來使用
使用方式二:在全局FilterConfig中注冊,是過濾器對所有Controller有好用,不需挨個加特性辨別
B.在控制器類中重寫方法,也可以在一個基類中重寫方法 ,讓子類繼承,這種效果等同于将特性辨別加在控制器上
三.使用
1.身份驗證過濾器
a.在限制的Action執行前執行
b.重寫OnAuthorization方法
c.如果不想使用預設的身份驗證方式,需要将base.***删除
d.如果想進行跳轉,需要設定上下文對象的Result屬性為new RedirectResult(string url);
擷取區域名,控制器名,方法名
string strAreaName = filterContext.RouteData.DataTokens["area"].ToString().ToLower();
string strControllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower();
string strActionName = filterContext.ActionDescriptor.ActionName.ToLower();
2.異常過濾器
a.當發生異常時,用于進行自定義異步處理,如記錄日志、跳轉頁面
b.使用自定義異常處理,需要在web.config中為system.web添加<customErrors mode="On" />節點
c.重寫
OnException
方法,不要禁用base.OnException(filterContext);
3.行為過濾器
a.在行為被執行前、後執行的過濾器
b.重寫方法OnActionExecuting(行為執行前)
c.重寫方法OnActionExecuted(行為執行後)
4.結果過濾器
a.在結果被執行前、後執行的過濾器
b.重寫方法OnResultExecuting(結果執行前)
c.重寫方法OnResultExecuted(結果執行後)