天天看點

ASP.Net MVC過濾器

一.背景

   過濾器(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(結果執行後)