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

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

asp.net MVC過濾器的用法(轉)

2019-11-17 01:56:13
字體:
來源:轉載
供稿:網友
asp.net MVC過濾器的用法(轉)

轉自:http://www.studyofnet.com/news/257.html

APS.NET MVC中的每一個請求,都會分配給相應的控制器和對應的行為方法去處理,而在這些處理的前前后后如果想再加一些額外的邏輯處理。這時候就用到了過濾器。

在Asp.netMvc中當你有以下及類似以下需求時你可以使用Filter功能

  1. 判斷登錄與否或用戶權限
  2. 決策輸出緩存
  3. 防盜鏈
  4. 防蜘蛛
  5. 本地化與國際化設置
  6. 實現動態Action

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

如下表

過濾器類型

接口

描述

Authorization

IAuthorizationFilter

此類型(或過濾器)用于限制進入控制器或控制器的某個行為方法

Exception

IExceptionFilter

用于指定一個行為,這個被指定的行為處理某個行為方法或某個控制器里面拋出的異常

Action

IActionFilter

用于進入行為之前或之后的處理

Result

IResultFilter

用于返回結果的之前或之后的處理

但是默認實現它們的過濾器只有三種,分別是Authorize(授權),ActionFilter,HandleError(錯誤處理);各種信息如下表所示

過濾器

類名

實現接口

描述

ActionFilter

AuthorizeAttribute

IAuthorizationFilter

此類型(或過濾器)用于限制進入控制器或控制器的某個行為方法

HandleError

HandleErrorAttribute

IExceptionFilter

用于指定一個行為,這個被指定的行為處理某個行為方法或某個控制器里面拋出的異常

自定義

ActionFilterAttribute

IActionFilter和IResultFilter

用于進入行為之前或之后的處理或返回結果的之前或之后的處理

一、應用于Action的Filter

創建 Action filter 必須實現 IActionFilter 接口,該接口定義了兩個方法

方法名調用時機可進行的操作
OnActionExecutingAction方法執行之前可以給 filterContext.Result 賦值,以阻止 Action 的執行可以通過 filterContext.ActionParameters 查看或修改 Action 的參數
OnActionExecutedAction方法執行之后可以通過 filterContext.Exception 獲取 Action 執行時拋出的異常,并能把它標記為“已處理”:filterContext.ExceptionHandled = true??梢圆榭赐ㄟ^filterContext.Result查看 Action 的執行結果,但是不能修改。

Action過濾器是通過繼承ActionFilterAttribute類來實現的一個Attribute類。ActionFilterAttribute 是一個抽象類,提供了兩個virtual的方法給我們重寫,OnActionExecutingOnActionExecuted

ASP.NET MVC 框架會在調用Action方法之前調用你Action過濾器中的OnActionExecuting方法,在之后調用Action過濾器中的OnActionExecuted方法。當然在創建Action過濾器的時候你不需兩個方法都實現。

下面的示例是在調用Action方法之前和之后的日志跟蹤:

C# 代碼 復制
public class LoggingFilterAttribute : ActionFilterAttribute
 {     public override void OnActionExecuting(FilterExecutingContext         filterContext)     {         filterContext.HttpContext.Trace.Write("Starting: " +          filterContext.ActionMethod.Name);     }      public override void OnActionExecuted(FilterExecutedContext         filterContext)     {         if (filterContext.Exception != null)         {             filterContext.HttpContext.Trace.Write("Exception thrown");         }     } }

部分參數說明

Action Filter Context

OnActionExecuting方法有一個類型為FilterExecutingContext的參數,而OnActionExecuted方法有一個相應的類型為FilterExcutedContext的參數。兩個Context類都是繼承自FilterContext類,而FilterContext類繼承自ControllerContext類并包含一個ActionMethod屬性。你可以使用ActionMethod屬性來堅定這個Action過濾器是應用到哪個Action方法上的。

FilterExecutingContext類包含一個 Cancel 的屬性,允許你取消當前的Action。

FilterExcutedContext類包含一個Exception屬性和一個ExceptionHandled屬性。如果Exception屬性為null,則沒有異常在action stack中,表明Action方法運行并沒有發生錯誤。如果Exception屬性不為null,則過濾器知道該怎么處理,過濾器處理完異常后會發出已經處理完的信號,然后將ExceptionHandled屬性設為true。就算ExceptionHandled屬性為true,堆棧中添加到其他Action方法的OnActionExcetued方法將會照常被調用,這種場景就如就算一個異常被處理了,日志記錄filter一樣照常執行。

使用方法

你可以將過濾器應用到任何一個你喜歡的Action方法上。下面的示例演示一個控制器中包含的用Action過濾器Attribute標記的Action方法。

C# 代碼 復制
public class HomeController : Controller
 {     [LoggingFilter]     public void Index()     {         RenderView("Index");     }      [LoggingFilter]     public void About()     {         RenderView("About");     }      [LoggingFilter]     pub
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 娱乐| 宜阳县| 金溪县| 常熟市| 儋州市| 栖霞市| 瓮安县| 库尔勒市| 安庆市| 河间市| 贵南县| 阳朔县| 临汾市| 新兴县| 临城县| 潮州市| 明水县| 阳春市| 任丘市| 唐海县| 泰顺县| 潍坊市| 南丰县| 滨海县| 中牟县| 德州市| 西城区| 策勒县| 湘潭县| 平原县| 体育| 平度市| 司法| 浦城县| 津南区| 洛阳市| 宁化县| 滦平县| 大关县| 乐至县| 小金县|