一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET Core MVC 過濾器的使用方法介紹

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

2020-05-15 14:15Sweet-Tang ASP.NET教程

本篇文章主要介紹了ASP.NET Core MVC 過濾器的使用方法介紹,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

過濾器如何工作?

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

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

實現

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

同步過濾器定義OnStageExecuting和OnStageExecuted方法,會在管道特定階段之前和之后運行代碼的。例如IActionFilter過濾器,在調用Action方法之前調用OnActionExecuting,在Action方法之回之后調用OnActionExecuted

?
1
2
3
4
5
6
7
8
9
10
11
12
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的委托,當調用該委托時會執行具體管道階段的工作。例如,ActionExecutionDelegate用于調用Action方法,您可以在調用它之前和之后執行代碼。

?
1
2
3
4
5
6
7
8
9
10
11
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,以及與它們對應的異步接口。

提示

您不需要同時實現兩種過濾器接口,要么是同步的,要么是異步的??蚣苁紫葯z查過濾器是否實現了異步接口,如果是,直接執行異步方法。如果不是,它會執行同步接口的方法。如果在一個類上同時實現兩種接口,則只會調用異步方法。當使用像ActionFilterAttribute這類抽象類時,您只需要覆蓋過濾器的同步方法或異步方法。

過濾器類型

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

1.Authorization Filter

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

2.Resource Filter

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

3.Action Filter

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

4.Exception Filter

用于為應用程序執行異常處理策略。

5.Result Filter

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

過濾器運行順序

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

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

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

過濾器的作用域與執行順序

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 英語文檔

默認執行順序

當管道的某個階段存在多個過濾器時,過濾器執行的默認順序由作用域確定:全局過濾器優先于控制器過濾器,控制器過濾器優先于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在所有過濾器之后調用。

覆蓋默認執行順序

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

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

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

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

 

序號 過濾器作用域 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

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

總結

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/tdfblog/p/filters-in-aspnet-core-mvc.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天堂在线中文字幕 | 视频一区二区三区在线观看 | 精品一区二区三区自拍图片区 | 免费日本视频 | 精品久久洲久久久久护士免费 | 免费看成人毛片日本久久 | 色综合欧美色综合七久久 | 国产成人精品综合在线观看 | 日本精品欧洲www | 日韩高清一区二区 | 18韩国美女vip视频7 | 国产精品久久久久久久久久久搜索 | 妹妹骑上来蹭着蹭着就射了 | 亚洲v日韩v欧美在线观看 | 白发在线视频播放观看免费 | 亚洲色图二区 | 深夜福利一区 | 91手机在线| 日韩性公交车上xxhd免费 | 高清色黄毛片一级毛片 | 美国video | 久久成人伊人欧洲精品AV | 日本艳鉧动漫1~6在线观看 | 92国产福利久久青青草原 | 日本强不卡在线观看 | 热99精品只有里视频最新 | 性欧美sexvideo另类 | 国产农村乱子伦精品视频 | 精品欧美小视频在线观看 | 免费一级国产大片 | 午夜在线观看免费完整直播网 | 欧美va在线| 国产suv精品一区二区四区三区 | 久久综合老色鬼网站 | 欧美香蕉人人人人人人爱 | 超级乱淫伦短篇在车上 | 精品一区二区三区色花堂 | 亚洲国产成人精品不卡青青草原 | 免费人成黄页在线观看69 | 大又大又黄又爽免费毛片 | 污影院|