国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

MVC過濾器的使用總結

2019-11-17 01:33:55
字體:
來源:轉載
供稿:網友

MVC過濾器的使用總結

一、過濾器的作用

  在MVC項目當中,當我們要實現這些功能時:身份驗證,異常處理、日志記錄,性能統計,如果按照一般的做法那就需要在每個頁面重復做這些工作,這樣做起來不僅費時費力,代碼也會變得冗余難懂,如何在不改變原有代碼結構添加這些功能呢?AOP就是為了解決這一類問題而產生的。AOP,意為:面向切面編程,可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術。在MVC中,過濾器就是一種AOP技術。

二、過濾器的分類

  MVC支持的過濾器類型有四種,分別是:Authorization(授權),Action(行為),Result(結果)和Exception(異常),如下表

三、過濾器的使用(實現接口方式)

1、過濾器定義

    public class MyFilter : FilterAttribute, IActionFilter, IResultFilter, IAuthorizationFilter, IExceptionFilter    {        public void OnAuthorization(AuthorizationContext filterContext)        {            filterContext.HttpContext.Response.Write("返回授權<br/>");        }        public void OnActionExecuting(ActionExecutingContext filterContext)        {            filterContext.HttpContext.Response.Write("Action執行之前<br/>");        }        public void OnActionExecuted(ActionExecutedContext filterContext)        {            filterContext.HttpContext.Response.Write("Action執行之后<br/>");        }        public void OnException(ExceptionContext filterContext)        {            filterContext.HttpContext.Response.Write("返回異常:" + filterContext.Exception);            filterContext.ExceptionHandled = true; //標記異常已處理        }        public void OnResultExecuting(ResultExecutingContext filterContext)        {            filterContext.HttpContext.Response.Write("Request執行之前<br/>");        }        public void OnResultExecuted(ResultExecutedContext filterContext)        {            filterContext.HttpContext.Response.Write("Request執行之后<br/>");        }    }

從上面的代碼看出要實現這四種過濾器都要實現各自的接口,其中FilterAttribute則是為了把過濾器變成特性類。

四種過濾的執行順序是,Authorization(授權過濾器)的OnAuthorization()方法最先執行,接著是Action(行為過濾器)的方法OnActionExecuting()和OnActionExecuted()。如果Action時拋出異常,則執行Exception(異常過濾器)的方法OnException(),Result(結果過濾器)的方法OnResultExecuting()和OnResultExecuted()則不會再執行。如果沒有異常,則執行Result(結果過濾器)的兩個方法。

2、過濾器使用

   [MyFilter]    public class HomeController : Controller    {        [MyFilter]        public ActionResult Index()        {            throw new Exception("我是異常");            return View();        }    }

說明:可以直接加在Controller或Action上,如果同時加,則只會執行Action上的過濾器。

如果需要所有的Controller加過濾器,可以在FilterConfig中實現,如下:

    public class FilterConfig    {        public static void RegisterGlobalFilters(GlobalFilterCollection filters)        {            filters.Add(new HandleErrorAttribute());            filters.Add(new MyFilter);        }    }

四、過濾器的使用(繼承類的方式)

  如果要自定義Action(行為過濾器)和Result(結果過濾器),我們可以通過繼承類ActionFilterAttribute,重寫類中的方法來實現,具體如下:

    public class MyFilter : ActionFilterAttribute    {        public string Message { get; set; }        public override void OnActionExecuting(ActionExecutingContext filterContext)        {            base.OnActionExecuting(filterContext);            filterContext.HttpContext.Response.Write("Action執行之前" + Message + "<br />");        }        public override void OnActionExecuted(ActionExecutedContext filterContext)        {            base.OnActionExecuted(filterContext);            filterContext.HttpContext.Response.Write("Action執行之后" + Message + "<br />");        }        public override void OnResultExecuting(ResultExecutingContext filterContext)        {            base.OnResultExecuting(filterContext);            filterContext.HttpContext.Response.Write("返回Result之前" + Message + "<br />");        }        public override void OnResultExecuted(ResultExecutedContext filterContext)        {            base.OnResultExecuted(filterContext);            filterContext.HttpContext.Response.Write("返回Result之后" + Message + "<br />");        }    }

Authorization(授權過濾器)對應的類是:AuthorizeAttribute

Exception(異常過濾器)對應的類是:HandleErrorAttribute

Demo下載


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大同市| 田阳县| 余江县| 黑龙江省| 澳门| 平罗县| 云南省| 淳化县| 青阳县| 仙游县| 进贤县| 江阴市| 兰西县| 伊川县| 虞城县| 新田县| 虎林市| 道真| 左权县| 顺昌县| 泰州市| 额济纳旗| 马边| 双峰县| 衡水市| 百色市| 新乐市| 林周县| 浑源县| 安新县| 九江市| 佳木斯市| 宜兴市| 芜湖市| 中宁县| 井冈山市| 通河县| 安庆市| 广丰县| 卓尼县| 右玉县|