我們知道Mvc提供我們想要的功能的擴展,我們簡單說說通過擴展Controller,以及ActionFilterAttribute來實現我們想要達到的權限管理內容。
我們來看下面結構:
public class BaseController : Controller { public string User{set;get;} public string Limits {set;get;} /// <summary> /// /// </summary> /// <param name="filterContext"></param> protected override void OnActionExecuting(ActionExecutingContext filterContext) { ///實現我們提供的權限操作 filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { Controller = "Index", action = "Default" })); } }
我們看到通過集成Controller我們可以在運行Controller之前來判斷用戶操作權限,那么我們可以試想此處的應用場景,如當我們的用戶未認證,那么我們可以通過直接判斷跳轉到認證頁面。如采用MVC提供Controller驗證過濾。
下面我們在來看:ActionFilterAttribute
1 /// <summary> 2 /// 參數過濾器 3 /// </summary> 4 public class ParamFilter : ActionFilterAttribute 5 { 6 /// <summary> 7 /// 執行Action之前操作 8 /// </summary> 9 /// <param name="filterContext"></param> 10 public override void OnActionExecuting(ActionExecutingContext filterContext) 11 { 12 ///處理Action之前操作內容根據我們提供的規則來定義這部分內容 13 base.OnActionExecuting(filterContext); 14 } 15 16 /// <summary> 17 /// 執行Action之后操作 18 /// </summary> 19 /// <param name="filterContext"></param> 20 public override void OnActionExecuted(ActionExecutedContext filterContext) 21 { 22 base.OnActionExecuted(filterContext); 23 } 24 }
通過擴展我們可以通過自己的應用場景以及內容來完成我們所想要達到的目的。
名稱 | 說明 | |
---|---|---|
![]() |
Equals | 基礎結構。返回一個值,該值指示此實例是否與指定的對象相等。 (繼承自 Attribute。) |
![]() |
Finalize | 允許對象在“垃圾回收”回收之前嘗試釋放資源並執行其他清理操作。 (繼承自 Object。) |
![]() |
GetHashCode | 返回此實例的哈希代碼。 (繼承自 Attribute。) |
![]() |
GetType | 獲取當前實例的 Type。 (繼承自 Object。) |
![]() |
IsDefaultAttribute | 當在派生類中重寫時,指示此實例的值是否是派生類的默認值。 (繼承自 Attribute。) |
![]() |
Match | 當在派生類中重寫時,返回一個指示此實例是否等於指定對象的值。 (繼承自 Attribute。) |
![]() |
MemberwiseClone | 創建當前 Object 的淺表副本。 (繼承自 Object。) |
![]() |
OnActionExecuted | 在執行操作方法后由 MVC 框架調用。 |
![]() |
OnActionExecuting | 在執行操作方法之前由 MVC 框架調用。 |
![]() |
OnResultExecuted | 在執行操作結果后由 MVC 框架調用。 |
![]() |
OnResultExecuting | 在執行操作結果之前由 MVC 框架調用。 |
![]() |
ToString | 返回表示當前對象的字符串。 (繼承自 Object。) |
通常,可通過創建從抽象 FilterAttribute 類繼承的特性類,來創建操作篩選器。
某些內置操作篩選器(如 AuthorizeAttribute 和 HandleErrorAttribute)繼承自 FilterAttribute 類。
從 FilterAttribute 派生出來的操作篩選器始終在操作方法運行之前調用。
諸如 OutputCacheAttribute 之類的其他操作篩選器將繼承抽象 ActionFilterAttribute 類,這使操作篩選器可在操作方法運行之前或之后運行。
可以使用操作篩選器特性來標記任何操作方法或控制器。 如果特性標記控制器,則操作篩選器將應用於該控制器中的所有操作方法。
有關使用特性的更多信息,請參見利用特性擴展元數據。