• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    ASP.NET Core MVC 過濾器的使用方法介紹

    來源:懂視網 責編:小采 時間:2020-11-27 22:35:24
    文檔

    ASP.NET Core MVC 過濾器的使用方法介紹

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

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

    過濾器如何工作?

    過濾器在 MVC Action 調用管道中運行,有時稱為過濾器管道。MVC選擇要執(zhí)行的Action方法后,才會執(zhí)行過濾器管道:

    實現

    過濾器同時支持同步和異步兩種不同的接口定義。您可以根據執(zhí)行的任務類型,選擇同步或異步實現。

    同步過濾器定義OnStageExecuting和OnStageExecuted方法,會在管道特定階段之前和之后運行代碼的。例如IActionFilter過濾器,在調用Action方法之前調用OnActionExecuting,在Action方法之回之后調用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
     }
     }
    
    

    異步過濾器定義了一個OnStageExecutionAsync方法。該方法提供了FilterTypeExecutionDelegate的委托,當調用該委托時會執(zhí)行具體管道階段的工作。例如,ActionExecutionDelegate用于調用Action方法,您可以在調用它之前和之后執(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
     }
     }
    

    您可以在單個類中實現多個過濾器接口。例如,ActionFilterAttribute抽象類實現了IActionFilter和IResultFilter,以及與它們對應的異步接口。

    提示

    您不需要同時實現兩種過濾器接口,要么是同步的,要么是異步的。框架首先檢查過濾器是否實現了異步接口,如果是,直接執(zhí)行異步方法。如果不是,它會執(zhí)行同步接口的方法。如果在一個類上同時實現兩種接口,則只會調用異步方法。當使用像ActionFilterAttribute這類抽象類時,您只需要覆蓋過濾器的同步方法或異步方法。

    過濾器類型

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

    1.Authorization Filter

    授權過濾器 在過濾器管道中第一個執(zhí)行,通常用于驗證當前請求的合法性,不合法后面的管道會直接跳過。它們只有一個Before方法,不像其它大多數過濾器支持前置階段方法和后置階段方法。注意,您不要在授權過濾器中拋出異常,因為沒有任何代碼來處理異常(異常過濾器不處理它們)。

    2.Resource Filter

    資源過濾器是第二個運行,在 Authorization Filter 之后,Model Binding 之前執(zhí)行。在性能方面,資源過濾器在實現緩存或截斷過濾器管道尤為重要。

    3.Action Filter

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

    4.Exception Filter

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

    5.Result Filter

    當 Action 執(zhí)行完成后,最后會執(zhí)行過濾器。用于處理ActionResult結果輸出策略。

    過濾器運行順序

    ASP.NET Core 的每個請求都會先經過已注冊的Middleware,接著才會執(zhí)行過濾器:同類型的過濾器都會以先進后出的方式執(zhí)行。

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

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

    過濾器具有三種不同級別的作用域。您可以通過Attribute將過濾器注冊到指定控制器或 Action 方法;您也可以在Startup類的ConfigureServices方法中將過濾器注冊到MvcOptions.Filters的集合中作為全局過濾器(對所有的控制器和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>();
     }
     }
    
    

    示例來自于ASP.NET Core MVC 英語文檔

    默認執(zhí)行順序

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

    以下示例是同步 Action 過濾器調用的順序:

    序號 過濾器作用域 過濾器方法
    1 Global OnActionExecuting
    2 Controller OnActionExecuting
    3 Method OnActionExecuting
    4 Method OnActionExecuted
    5 Controller OnActionExecuted
    6 Global OnActionExecuted

    提示

    每個控制器的基類Controller包含OnActionExecuting和OnActionExecuted方法。其中OnActionExecuting在所有過濾器之前調用,OnActionExecuted在所有過濾器之后調用。

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

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

    您可以使用構造函數參數設置Order屬性:

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

    如果您將上述示例中 Action 過濾器的Order設置為1,將控制器和全局過濾器的Order屬性分別設置為2和3,則執(zhí)行順序將與默認相反。

    序號 過濾器作用域 Order 屬性 過濾器方法
    1 Method 1 OnActionExecuting
    2 Controller 2 OnActionExecuting
    3 Global 3 OnActionExecuting
    4 Global 3 OnActionExecuted
    5 Controller 2 OnActionExecuted
    6 Method 1 OnActionExecuted

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

    總結

    今天我們已經了解了關于過濾器基本知識,在下一篇博客中,我們將介紹內置過濾器、過濾的使用、依賴注入、取消與截斷等知識,謝謝!

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    ASP.NET Core MVC 過濾器的使用方法介紹

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

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 99久久精品国产毛片| 精品欧美激情在线看| 国产精品永久免费视频| 国产精品亚洲A∨天堂不卡| 久久噜噜久久久精品66| 97视频在线精品国自产拍| 老司机午夜精品视频资源| 免费精品精品国产欧美在线 | 精品免费tv久久久久久久| 亚洲国产成人精品无码区在线观看| 国产精品无码免费专区午夜| 99RE6热在线精品视频观看| 无码少妇精品一区二区免费动态| 麻豆国产精品VA在线观看不卡| 丁香色婷婷国产精品视频| 精品少妇一区二区三区视频| 国产精品伦一区二区三级视频| 久久夜色精品国产噜噜噜亚洲AV| 在线观看亚洲精品福利片 | 久久精品人妻一区二区三区| 91精品国产福利在线观看| 国产精品夜色一区二区三区 | 久久国产精品偷99| 国产啪亚洲国产精品无码| 99熟女精品视频一区二区三区 | 亚洲av无码精品网站| 日韩精品一区二区三区中文字幕| 亚洲中文字幕久久精品无码APP | 亚洲2022国产成人精品无码区 | 一级香蕉精品视频在线播放| 国产精品免费观看调教网| 精品一区二区三区在线观看视频| 蜜臀精品无码AV在线播放| 国产精品色视频ⅹxxx| 亚洲午夜精品一区二区| 最新国产精品亚洲| 亚洲自偷自偷精品| 91午夜精品亚洲一区二区三区| 99久久国产综合精品五月天喷水 | 国产亚洲精品国看不卡| 精品乱子伦一区二区三区高清免费播放|