ASP.NET MVC 中給咱們提供了內置的過濾器,經過過濾器,咱們能夠在控制器內的方法先後,添加必須的業務邏輯,如權限驗證,身份驗證,錯誤處理等。html
今天,咱們主要介紹3個過濾器:OutputCacheAttribute,AuthorizeAttribute,HandleErrorAttribute。web
咱們會根據這三個內置過濾器,分別舉不一樣的例子進行解釋說明。瀏覽器
1. OutputCacheAttributeide
咱們先看看源碼:spa
能夠看出OutputCacheAttribute繼承了ActionFilterAttribute,因此能夠重寫ActionFilterAttribute的方法OnActionExecuting等,code
類中有CacheProfile,Duration,VaryByParam幾個屬性,下面咱們看一下用法。添加以下代碼:server
[OutputCache(Duration=10)] public ActionResult OutputCache() { ViewData["TimeCache"] = "當前時間是:" + DateTime.Now.ToLongTimeString(); return View(); }
打開瀏覽器,能夠看到,不斷刷新,每10秒就會更新一次:htm
固然,也能夠寫在頁面上,在頁面添加代碼:blog
<%@ OutputCache Duration="10" VaryByParam="None" %>
以下面代碼:繼承
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <%@ OutputCache Duration="10" VaryByParam="None" %> <!DOCTYPE html> <html> <head runat="server"> <meta name="viewport" content="width=device-width" /> <title>OutputCache</title> </head> <body> <div> <%=ViewData["TimeCache"] %> </div> </body> </html>
或者使用CacheProfile,代碼以下:
[OutputCache(CacheProfile = "testProfile")] public ActionResult OutputCache() { ViewData["TimeCache"] = "當前時間是:" + DateTime.Now.ToLongTimeString(); return View(); }
在web.config添加以下配置:
<system.web> <caching> <outputCacheSettings> <outputCacheProfiles> <add name="testProfile" duration="10" varyByParam="*" /> </outputCacheProfiles> </outputCacheSettings> </caching> </system.web>
2. AuthorizeAttribute
AuthorizeAttribute類的做用,主要是爲頁面指定操做用戶和角色。
咱們假設以Session做爲頁面管理權限,新建一個CustomAuthorize類,添加以下代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcMobileDMS.App_Start { public class CustomAuthorize : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { //假設以Session做爲判斷頁面權限 if (filterContext.HttpContext.Session["temp"] == null) { filterContext.HttpContext.Response.Redirect("~/dms/logon"); } base.OnAuthorization(filterContext); } } }
再在控制器中的方法添加以下代碼:
[MvcMobileDMS.App_Start.CustomAuthorize] public ActionResult Authorize() { return View(); }
便可進行權限檢查。
3. HandleErrorAttribute
HandleErrorAttribute特性主要用於處理由操做引起的錯誤。在實際操做中咱們能夠繼承HandleErrorAttribute類,並重寫OnException方法來進行錯誤記錄。
首先,咱們新建一個錯誤頁:
public ActionResult error() { return View(); }
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <!DOCTYPE html> <html> <head runat="server"> <meta name="viewport" content="width=device-width" /> <title>error</title> </head> <body> <div> Sorry.an error occoured. </div> </body> </html>
並添加錯誤處理類ErrorHandle繼承自HandleErrorAttribute,代碼以下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcMobileDMS.App_Start { public class ErrorHandle : HandleErrorAttribute { public override void OnException(ExceptionContext Context) { HttpContext.Current.Response.Redirect("~/dms/error"); base.OnException(Context); } } }
在DMS控制器新增一個方法EceptionThrow,並加上過濾器ErrorHandle,代碼以下:
[MvcMobileDMS.App_Start.ErrorHandle] public ActionResult EceptionThrow() { throw new ArgumentNullException("filterContext"); }
下面,咱們打開瀏覽器,輸入地址:http://localhost:7449/dms/EceptionThrow,顯示以下:
當EceptionThrow()方法拋出錯誤時,ErrorHandle過濾器觸發OnException方法,跳轉到error頁面。
因而可知,咱們能夠經過HandleErrorAttribute過濾器,處理各類Exception,並使用自定義方法進行處理。
以上,但願能對您有所幫助O(∩_∩)O哈哈~