麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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下載


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产好片无限资源 | 国产精品手机在线亚洲 | 成码无人av片在线观看网站 | 综合网日日天干夜夜久久 | 精品久久久久久久久久久久久久 | 成人男女啪啪免费观看网站四虎 | 国产亚洲精品久久久久5区 日韩一级片一区二区三区 国产精品久久久久av | 久久久久久中文字幕 | 99精品无人区乱码在线观看 | 羞羞视频免费网站日本动漫 | 久久国产一级片 | 国产一级一区二区 | 国产午夜电影在线观看 | 国产精品hd免费观看 | 色综合激情 | 宅男视频在线观看免费 | 美女黄页网站免费进入 | 午夜视频在线看 | 亚洲啊v在线观看 | 亚洲午夜久久久精品一区二区三区 | 国产成人精品区 | 国产午夜精品一区二区三区在线观看 | 亚洲va国产va | 在线a毛片 | 欧美日韩网站在线观看 | 精品国产乱码久久久久久丨区2区 | 日日摸夜夜添夜夜添牛牛 | asian超清日本肉体pics | 日韩毛片一区二区三区 | 久久影城 | 久久精品视频在线免费观看 | 国产一级aa大片毛片 | 亚洲精品成人av在线 | 人人做人人看 | 国产精品免费一区二区 | 999精品国产 | 性插视频 | ⅴideo裸体秀hd | 亚洲成人欧美在线 | 毛片免费在线视频 | 亚洲第一页在线观看 |