真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

ASP.NETCoreMVC過濾器怎么用-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關ASP.NET Core MVC過濾器怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都做網站、成都網站設計、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的華寧網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

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

過濾器如何工作?

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

ASP.NET Core MVC過濾器怎么用

實現(xiàn)

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

同步過濾器定義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
  }
 }

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

提示


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

過濾器類型

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


1.Authorization Filter


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


2.Resource Filter


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


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í)行。

ASP.NET Core MVC過濾器怎么用

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

過濾器的作用域與執(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();
  }
 }

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

默認執(zhí)行順序

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


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

序號過濾器作用域過濾器方法
1GlobalOnActionExecuting
2ControllerOnActionExecuting
3MethodOnActionExecuting
4MethodOnActionExecuted
5ControllerOnActionExecuted
6GlobalOnActionExecuted

提示


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

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

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


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


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

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


序號過濾器作用域Order 屬性過濾器方法
1Method1OnActionExecuting
2Controller2OnActionExecuting
3Global3OnActionExecuting
4Global3OnActionExecuted
5Controller2OnActionExecuted
6Method1OnActionExecuted

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

關于“ASP.NET Core MVC過濾器怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


網頁名稱:ASP.NETCoreMVC過濾器怎么用-創(chuàng)新互聯(lián)
當前URL:http://weahome.cn/article/ddjspo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部