ASP.NETMVC過濾器(四)-創(chuàng)新互聯(lián)

 ASP.NET MVC 過濾器(四)

前言

前一篇對IActionFilter方法執(zhí)行過濾器在框架中的執(zhí)行過程做了大概的描述,本篇將會對IActionFilter類型的過濾器使用來做一些介紹。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比邵原網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式邵原網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋邵原地區(qū)。費用合理售后完善,10年實體公司更值得信賴。

ASP.NET MVC過濾器

  • 過濾器在系統(tǒng)框架中的整體對象模型

  • IAuthorizationFilter授權(quán)認證過濾器的執(zhí)行過程

  • 使用IAuthorizationFilter過濾器

  • IActionFilter行為過濾器的執(zhí)行過程

  • 自定義實現(xiàn)IActionFilter行為過濾器

  • 異常過濾器的使用

自定義實現(xiàn)IActionFilter行為過濾器

還是接著前面控制器篇幅的示例來演示,沒看過的朋友也沒關(guān)系,只要有個一個基礎(chǔ)的顯示頁面就可以了。

圖1

ASP.NET MVC 過濾器(四)

這是初始頁面調(diào)用了IoCDemoController控制器默認的Index方法。

下面我們來實現(xiàn)我們自定義的IActionFilter類型。

代碼1-1

 1     public class MyCustomActionFilterAttribute : FilterAttribute, IActionFilter
 2     {
 3 
 4         public void OnActionExecuted(ActionExecutedContext filterContext)
 5         {
 6             filterContext.HttpContext.Response.Write("這是在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-執(zhí)行之后");
 7             
 8         }
 9 
10         public void OnActionExecuting(ActionExecutingContext filterContext)
11         {
12             filterContext.HttpContext.Response.Write("這是在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-執(zhí)行之前");
13         }
14 }

在上篇中我們對上述代碼的中設(shè)計到類型結(jié)構(gòu)已經(jīng)作了描述了,在此不再重復(fù),我們定義好了行為過濾器那就把它用起來。

ASP.NET MVC 過濾器(四)

在應(yīng)用了此過濾器過后我們再來看一下運行的結(jié)果:

圖2

ASP.NET MVC 過濾器(四)

我們可以試著把過濾器放在所要執(zhí)行的控制器行為上,而不是控制器:

代碼1-2

 1     public class IoCDemoController : Controller
 2     {
 3         private IDataStandard _DataStandard;
 4 
 5         public IoCDemoController(IDataStandard dataStandard)
 6         {
 7             _DataStandard = dataStandard;
 8         }
 9 
10         [MyCustomActionFilter]
11         public ActionResult Index()
12         {
13             return View(_DataStandard.GetProducts());
14             
15         }
16     }

再次運行發(fā)現(xiàn)結(jié)果會和放在控制器上的結(jié)果一樣。唯一不同的是過濾器的應(yīng)用范圍不同,放在方法上的時候只有在請求這個控制器行為的時候才會調(diào)用這些過濾器,而放在控制器上的過濾器,無論你請求控制器中的哪個行為都會調(diào)用。

過濾器的執(zhí)行順序

通過前幾篇的學(xué)習(xí),我們從框架的硬編碼中可以看出,控制器不同類型的執(zhí)行順序,依次是授權(quán)認證過濾器、行為過濾器、結(jié)果過濾器。而還有一種異常過濾器,是不受限制的,只要有異常就會觸發(fā)調(diào)用。這里說的是不同類型的過濾器之前的框架調(diào)用順序,那么同一種類型過濾器之間的調(diào)用順序我們怎么控制呢?來看示例:

代碼1-3

 1     public class MyCustomActionFileterOneAttribute : FilterAttribute, IActionFilter
 2     {
 3 
 4         public void OnActionExecuted(ActionExecutedContext filterContext)
 5         {
 6             filterContext.HttpContext.Response.Write("這是" + this.GetType().Name + "過濾器在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-執(zhí)行之后輸出");
 7         }
 8 
 9         public void OnActionExecuting(ActionExecutingContext filterContext)
10         { 
11             filterContext.HttpContext.Response.Write("這是"+this.GetType().Name+"過濾器在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-執(zhí)行之前輸出");
12         }
13     }

并且上述1-1代碼中的輸出示例修改為1-3這樣的輸入示例,然后我們再把新定義的行為過濾器加到行為方法上:

1         [MyCustomActionFilter]
2         [MyCustomActionFileterOne]
3         public ActionResult Index()
4         {
5             return View(_DataStandard.GetProducts());
6         }

我們看一下結(jié)果如圖:

圖3

ASP.NET MVC 過濾器(四)

看到這個結(jié)果,有的朋友可能會說了,是按照添加后位置的順序來執(zhí)行的,可以這么說吧,我們再來修改一下添加在Index()方法之上的兩個過濾器中的屬性變量Order,這個屬性來至IMvcFilter接口類型,所有的過濾器類型都是要實現(xiàn)它的,只不過在我們自定義中的FilterAttribute類型已經(jīng)幫我們實現(xiàn)了。

看下修改后的示例代碼:

代碼1-4

1         [MyCustomActionFilter(Order=2)]
2         [MyCustomActionFileterOne(Order=1)]
3         public ActionResult Index()
4         {
5             return View(_DataStandard.GetProducts());
6         }

運行結(jié)果如圖:

ASP.NET MVC 過濾器(四)

對于過濾器的使用還有許多種方式,本篇的IActionFilter類型過濾器就講解到這里。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

新聞標(biāo)題:ASP.NETMVC過濾器(四)-創(chuàng)新互聯(lián)
分享路徑:http://muchs.cn/article44/cosehe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)網(wǎng)站設(shè)計公司、App開發(fā)、做網(wǎng)站、電子商務(wù)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)