国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

ASP.NET Core MVC 過(guò)濾器的使用方法介紹

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:35:24
文檔

ASP.NET Core MVC 過(guò)濾器的使用方法介紹

ASP.NET Core MVC 過(guò)濾器的使用方法介紹:過(guò)濾器的作用是在 Action 方法執(zhí)行前或執(zhí)行后做一些加工處理。使用過(guò)濾器可以避免Action方法的重復(fù)代碼,例如,您可以使用異常過(guò)濾器合并異常處理的代碼。 過(guò)濾器如何工作? 過(guò)濾器在 MVC Action 調(diào)用管道中運(yùn)行,有時(shí)稱為過(guò)濾器管道。MVC選擇要執(zhí)行的Ac
推薦度:
導(dǎo)讀ASP.NET Core MVC 過(guò)濾器的使用方法介紹:過(guò)濾器的作用是在 Action 方法執(zhí)行前或執(zhí)行后做一些加工處理。使用過(guò)濾器可以避免Action方法的重復(fù)代碼,例如,您可以使用異常過(guò)濾器合并異常處理的代碼。 過(guò)濾器如何工作? 過(guò)濾器在 MVC Action 調(diào)用管道中運(yùn)行,有時(shí)稱為過(guò)濾器管道。MVC選擇要執(zhí)行的Ac

過(guò)濾器的作用是在 Action 方法執(zhí)行前或執(zhí)行后做一些加工處理。使用過(guò)濾器可以避免Action方法的重復(fù)代碼,例如,您可以使用異常過(guò)濾器合并異常處理的代碼。

過(guò)濾器如何工作?

過(guò)濾器在 MVC Action 調(diào)用管道中運(yùn)行,有時(shí)稱為過(guò)濾器管道。MVC選擇要執(zhí)行的Action方法后,才會(huì)執(zhí)行過(guò)濾器管道:

實(shí)現(xiàn)

過(guò)濾器同時(shí)支持同步和異步兩種不同的接口定義。您可以根據(jù)執(zhí)行的任務(wù)類(lèi)型,選擇同步或異步實(shí)現(xiàn)。

同步過(guò)濾器定義OnStageExecuting和OnStageExecuted方法,會(huì)在管道特定階段之前和之后運(yùn)行代碼的。例如IActionFilter過(guò)濾器,在調(diào)用Action方法之前調(diào)用OnActionExecuting,在Action方法之回之后調(diào)用OnActionExecuted

 public class SampleActionFilter : IActionFilter
 {
 public void OnActionExecuting(ActionExecutingContext context)
 {
 // do something before the action executes
 }

 public void OnActionExecuted(ActionExecutedContext context)
 {
 // do something after the action executes
 }
 }

異步過(guò)濾器定義了一個(gè)OnStageExecutionAsync方法。該方法提供了FilterTypeExecutionDelegate的委托,當(dāng)調(diào)用該委托時(shí)會(huì)執(zhí)行具體管道階段的工作。例如,ActionExecutionDelegate用于調(diào)用Action方法,您可以在調(diào)用它之前和之后執(zhí)行代碼。

 public class SampleAsyncActionFilter : IAsyncActionFilter
 {
 public async Task OnActionExecutionAsync(
 ActionExecutingContext context,
 ActionExecutionDelegate next)
 {
 // do something before the action executes
 await next();
 // do something after the action executes
 }
 }

您可以在單個(gè)類(lèi)中實(shí)現(xiàn)多個(gè)過(guò)濾器接口。例如,ActionFilterAttribute抽象類(lèi)實(shí)現(xiàn)了IActionFilter和IResultFilter,以及與它們對(duì)應(yīng)的異步接口。

提示

您不需要同時(shí)實(shí)現(xiàn)兩種過(guò)濾器接口,要么是同步的,要么是異步的。框架首先檢查過(guò)濾器是否實(shí)現(xiàn)了異步接口,如果是,直接執(zhí)行異步方法。如果不是,它會(huì)執(zhí)行同步接口的方法。如果在一個(gè)類(lèi)上同時(shí)實(shí)現(xiàn)兩種接口,則只會(huì)調(diào)用異步方法。當(dāng)使用像ActionFilterAttribute這類(lèi)抽象類(lèi)時(shí),您只需要覆蓋過(guò)濾器的同步方法或異步方法。

過(guò)濾器類(lèi)型

ASP.NET Core 有以下五種類(lèi)型的過(guò)濾器,每個(gè)過(guò)濾器類(lèi)型在過(guò)濾器管道中的不同階段執(zhí)行:

1.Authorization Filter

授權(quán)過(guò)濾器 在過(guò)濾器管道中第一個(gè)執(zhí)行,通常用于驗(yàn)證當(dāng)前請(qǐng)求的合法性,不合法后面的管道會(huì)直接跳過(guò)。它們只有一個(gè)Before方法,不像其它大多數(shù)過(guò)濾器支持前置階段方法和后置階段方法。注意,您不要在授權(quán)過(guò)濾器中拋出異常,因?yàn)闆](méi)有任何代碼來(lái)處理異常(異常過(guò)濾器不處理它們)。

2.Resource Filter

資源過(guò)濾器是第二個(gè)運(yùn)行,在 Authorization Filter 之后,Model Binding 之前執(zhí)行。在性能方面,資源過(guò)濾器在實(shí)現(xiàn)緩存或截?cái)噙^(guò)濾器管道尤為重要。

3.Action Filter

使用率最高的過(guò)濾器,在調(diào)用 Acioin 方法之前和之后執(zhí)行代碼。跟 Resource Filter 很類(lèi)似,但 Model Binding 在之后執(zhí)行。

4.Exception Filter

用于為應(yīng)用程序執(zhí)行異常處理策略。

5.Result Filter

當(dāng) Action 執(zhí)行完成后,最后會(huì)執(zhí)行過(guò)濾器。用于處理ActionResult結(jié)果輸出策略。

過(guò)濾器運(yùn)行順序

ASP.NET Core 的每個(gè)請(qǐng)求都會(huì)先經(jīng)過(guò)已注冊(cè)的Middleware,接著才會(huì)執(zhí)行過(guò)濾器:同類(lèi)型的過(guò)濾器都會(huì)以先進(jìn)后出的方式執(zhí)行。

黃色箭頭是正常情況流程
灰色箭頭是異常處理流程

過(guò)濾器的作用域與執(zhí)行順序

過(guò)濾器具有三種不同級(jí)別的作用域。您可以通過(guò)Attribute將過(guò)濾器注冊(cè)到指定控制器或 Action 方法;您也可以在Startup類(lèi)的ConfigureServices方法中將過(guò)濾器注冊(cè)到MvcOptions.Filters的集合中作為全局過(guò)濾器(對(duì)所有的控制器和Action方法均有效):

 public class Startup
 {
 public void ConfigureServices(IServiceCollection services)
 {
 services.AddMvc(options =>
 {
 options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader", 
 "Result filter added to MvcOptions.Filters")); // an instance
 options.Filters.Add(typeof(SampleActionFilter)); // by type
 options.Filters.Add(new SampleGlobalActionFilter()); // an instance
 });

 services.AddScoped<AddHeaderFilterWithDi>();
 }
 }

示例來(lái)自于ASP.NET Core MVC 英語(yǔ)文檔

默認(rèn)執(zhí)行順序

當(dāng)管道的某個(gè)階段存在多個(gè)過(guò)濾器時(shí),過(guò)濾器執(zhí)行的默認(rèn)順序由作用域確定:全局過(guò)濾器優(yōu)先于控制器過(guò)濾器,控制器過(guò)濾器優(yōu)先于Action方法過(guò)濾器。

以下示例是同步 Action 過(guò)濾器調(diào)用的順序:

序號(hào) 過(guò)濾器作用域 過(guò)濾器方法
1 Global OnActionExecuting
2 Controller OnActionExecuting
3 Method OnActionExecuting
4 Method OnActionExecuted
5 Controller OnActionExecuted
6 Global OnActionExecuted

提示

每個(gè)控制器的基類(lèi)Controller包含OnActionExecuting和OnActionExecuted方法。其中OnActionExecuting在所有過(guò)濾器之前調(diào)用,OnActionExecuted在所有過(guò)濾器之后調(diào)用。

覆蓋默認(rèn)執(zhí)行順序

您可以通過(guò)實(shí)現(xiàn)IOrderedFilter接口來(lái)覆蓋默認(rèn)的執(zhí)行順序。此接口公開(kāi)了Order屬性表示優(yōu)先級(jí),以確定執(zhí)行順序;具有較低Order值的過(guò)濾器將在具有較高Order值的過(guò)濾器之前執(zhí)行前置方法;具有較低Order值的過(guò)濾器將在具有較高Order值的過(guò)濾器之后執(zhí)行后置方法。

您可以使用構(gòu)造函數(shù)參數(shù)設(shè)置Order屬性:

[MyFilter(Name = "Controller Level Attribute", Order=1)]

如果您將上述示例中 Action 過(guò)濾器的Order設(shè)置為1,將控制器和全局過(guò)濾器的Order屬性分別設(shè)置為2和3,則執(zhí)行順序?qū)⑴c默認(rèn)相反。

序號(hào) 過(guò)濾器作用域 Order 屬性 過(guò)濾器方法
1 Method 1 OnActionExecuting
2 Controller 2 OnActionExecuting
3 Global 3 OnActionExecuting
4 Global 3 OnActionExecuted
5 Controller 2 OnActionExecuted
6 Method 1 OnActionExecuted

過(guò)濾器執(zhí)行時(shí),Order屬性的優(yōu)先級(jí)高于作用域。過(guò)濾器首先按Order屬性排序,然后再按作用域排序。所有內(nèi)置過(guò)濾器實(shí)現(xiàn)IOrderedFilter接口并將Order值默認(rèn)設(shè)置為0;因此,除非設(shè)置Order屬性為非零值,否則按作用域的優(yōu)先級(jí)執(zhí)行。

總結(jié)

今天我們已經(jīng)了解了關(guān)于過(guò)濾器基本知識(shí),在下一篇博客中,我們將介紹內(nèi)置過(guò)濾器、過(guò)濾的使用、依賴注入、取消與截?cái)嗟戎R(shí),謝謝!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

ASP.NET Core MVC 過(guò)濾器的使用方法介紹

ASP.NET Core MVC 過(guò)濾器的使用方法介紹:過(guò)濾器的作用是在 Action 方法執(zhí)行前或執(zhí)行后做一些加工處理。使用過(guò)濾器可以避免Action方法的重復(fù)代碼,例如,您可以使用異常過(guò)濾器合并異常處理的代碼。 過(guò)濾器如何工作? 過(guò)濾器在 MVC Action 調(diào)用管道中運(yùn)行,有時(shí)稱為過(guò)濾器管道。MVC選擇要執(zhí)行的Ac
推薦度:
標(biāo)簽: 使用 過(guò)濾器 net
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專題
Top
主站蜘蛛池模板: 欧美日韩国产码高清综合人成 | 免费国产在线观看 | 在线播放色 | 欧美十区| 国产手机精品一区二区 | 国产成人精品免费大全 | 国产99久久 | 欧美日韩国产在线观看 | 亚洲欧洲综合在线 | 亚洲欧美一区二区三区孕妇 | 特黄特黄aaaa级毛片免费看 | 91中文字幕在线 | 国产综合精品久久久久成人影 | 欧美成人高清在线视频大全 | 国产一区二区精品久久 | 欧美亚洲天堂 | 久久国内 | 91精品一区二区三区在线 | 欧美一区二区二区 | 国产精品第一区在线观看 | 国产第一页视频 | 亚洲精品第1页 | 精品72久久久久久久中文字幕 | 领导边摸边吃奶边做爽在线观看 | 91香蕉福利一区二区三区 | 一级毛片免费毛片毛片 | 亚洲精品视频在线播放 | 久久综合中文字幕一区二区 | 亚洲人成网站999久久久综合 | 久久精品国产欧美日韩99热 | 久久精品a国产一级 | 久久免费精品国产72精品剧情 | 国产成人精品久久一区二区三区 | 视频精品一区二区三区 | 毛片免费网站 | 欧美亚洲网 | 高清国产美女一级a毛片 | 国产免费一区二区三区 | 久久婷婷久久一区二区三区 | 黄色小视频免费在线观看 | 欧美精品在线视频 |