前一篇對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年實體公司更值得信賴。過濾器在系統(tǒng)框架中的整體對象模型
IAuthorizationFilter授權(quán)認證過濾器的執(zhí)行過程
使用IAuthorizationFilter過濾器
IActionFilter行為過濾器的執(zhí)行過程
自定義實現(xiàn)IActionFilter行為過濾器
異常過濾器的使用
還是接著前面控制器篇幅的示例來演示,沒看過的朋友也沒關(guān)系,只要有個一個基礎(chǔ)的顯示頁面就可以了。
圖1
這是初始頁面調(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ù),我們定義好了行為過濾器那就把它用起來。
在應(yīng)用了此過濾器過后我們再來看一下運行的結(jié)果:
圖2
我們可以試著把過濾器放在所要執(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)用。
通過前幾篇的學(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
看到這個結(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é)果如圖:
對于過濾器的使用還有許多種方式,本篇的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)
猜你還喜歡下面的內(nèi)容