前一篇對(duì)IActionFilter方法執(zhí)行過(guò)濾器在框架中的執(zhí)行過(guò)程做了大概的描述,本篇將會(huì)對(duì)IActionFilter類型的過(guò)濾器使用來(lái)做一些介紹。
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比邵原網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式邵原網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋邵原地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。過(guò)濾器在系統(tǒng)框架中的整體對(duì)象模型
IAuthorizationFilter授權(quán)認(rèn)證過(guò)濾器的執(zhí)行過(guò)程
使用IAuthorizationFilter過(guò)濾器
IActionFilter行為過(guò)濾器的執(zhí)行過(guò)程
自定義實(shí)現(xiàn)IActionFilter行為過(guò)濾器
異常過(guò)濾器的使用
還是接著前面控制器篇幅的示例來(lái)演示,沒(méi)看過(guò)的朋友也沒(méi)關(guān)系,只要有個(gè)一個(gè)基礎(chǔ)的顯示頁(yè)面就可以了。
圖1

這是初始頁(yè)面調(diào)用了IoCDemoController控制器默認(rèn)的Index方法。
下面我們來(lái)實(shí)現(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 }在上篇中我們對(duì)上述代碼的中設(shè)計(jì)到類型結(jié)構(gòu)已經(jīng)作了描述了,在此不再重復(fù),我們定義好了行為過(guò)濾器那就把它用起來(lái)。

在應(yīng)用了此過(guò)濾器過(guò)后我們?cè)賮?lái)看一下運(yùn)行的結(jié)果:
圖2

我們可以試著把過(guò)濾器放在所要執(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 }再次運(yùn)行發(fā)現(xiàn)結(jié)果會(huì)和放在控制器上的結(jié)果一樣。唯一不同的是過(guò)濾器的應(yīng)用范圍不同,放在方法上的時(shí)候只有在請(qǐng)求這個(gè)控制器行為的時(shí)候才會(huì)調(diào)用這些過(guò)濾器,而放在控制器上的過(guò)濾器,無(wú)論你請(qǐng)求控制器中的哪個(gè)行為都會(huì)調(diào)用。
通過(guò)前幾篇的學(xué)習(xí),我們從框架的硬編碼中可以看出,控制器不同類型的執(zhí)行順序,依次是授權(quán)認(rèn)證過(guò)濾器、行為過(guò)濾器、結(jié)果過(guò)濾器。而還有一種異常過(guò)濾器,是不受限制的,只要有異常就會(huì)觸發(fā)調(diào)用。這里說(shuō)的是不同類型的過(guò)濾器之前的框架調(diào)用順序,那么同一種類型過(guò)濾器之間的調(diào)用順序我們?cè)趺纯刂颇兀縼?lái)看示例:
代碼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 + "過(guò)濾器在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-執(zhí)行之后輸出");
7 }
8
9 public void OnActionExecuting(ActionExecutingContext filterContext)
10 {
11 filterContext.HttpContext.Response.Write("這是"+this.GetType().Name+"過(guò)濾器在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-執(zhí)行之前輸出");
12 }
13 }并且上述1-1代碼中的輸出示例修改為1-3這樣的輸入示例,然后我們?cè)侔研露x的行為過(guò)濾器加到行為方法上:
1 [MyCustomActionFilter]
2 [MyCustomActionFileterOne]
3 public ActionResult Index()
4 {
5 return View(_DataStandard.GetProducts());
6 }我們看一下結(jié)果如圖:
圖3

看到這個(gè)結(jié)果,有的朋友可能會(huì)說(shuō)了,是按照添加后位置的順序來(lái)執(zhí)行的,可以這么說(shuō)吧,我們?cè)賮?lái)修改一下添加在Index()方法之上的兩個(gè)過(guò)濾器中的屬性變量Order,這個(gè)屬性來(lái)至IMvcFilter接口類型,所有的過(guò)濾器類型都是要實(shí)現(xiàn)它的,只不過(guò)在我們自定義中的FilterAttribute類型已經(jīng)幫我們實(shí)現(xiàn)了。
看下修改后的示例代碼:
代碼1-4
1 [MyCustomActionFilter(Order=2)]
2 [MyCustomActionFileterOne(Order=1)]
3 public ActionResult Index()
4 {
5 return View(_DataStandard.GetProducts());
6 }運(yùn)行結(jié)果如圖:

對(duì)于過(guò)濾器的使用還有許多種方式,本篇的IActionFilter類型過(guò)濾器就講解到這里。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。
新聞標(biāo)題:ASP.NETMVC過(guò)濾器(四)-創(chuàng)新互聯(lián)
分享路徑:http://chinadenli.net/article44/cosehe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)公司、App開(kāi)發(fā)、做網(wǎng)站、電子商務(wù)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容