小白開學Asp.Net Core 《五》


小白開學Asp.Net Core《五》

                              —— 使用.Net Core MVC Filter

 

一、簡介

  今天在項目(https://github.com/AjuPrince/Aju.Carefree)做登陸權限時,用到了Filter,現將Filer的使用做以下記錄。

二、Filter 簡介

  Filter俗稱過濾器,它的作用是在Action方法執行前后做一些處理。它在Mvc Action 管道中運行,所以也可以叫做過濾器管道。

                         

三、Filter的執行順序

  Authorization Filter ->  Resource Filter -> Action Filter -> Exception Filter -> Result Filter

  在.Net Core MVC 中新增了異步過濾器,如果提供了異步和同步過濾器,那么將執行異步過濾器,同步過濾器將不會執行。 

              

    (圖片來自 John Wu 的博客

  • Authorization Filter

   Authorization Filter  是這幾種Filter中優先級最高的,通常用於驗證請求的合法性,俗稱 授權過濾器。

  • Resource Filter

   Resource Filter 是第二個被執行的,Model Binding之前執行,通常用於對Model加工處理,俗稱 資源過濾器

  • Action Filter 

   Action Filter 這個過濾器是最常用到的過濾器,在調用Action方法前后執行,在Model Binding之后執行,在使用上沒什么特別注意的,俗稱 方法過濾器

  • Exception Filter

   Exception Filter 常常用於應用程序執行異常是記錄日志

  • Result Filter

  Result Filter 當Action 執行完成后,最終會執行的Filter,常常用於處理 Action 執行結果

 四、Filter類型在Filter管道中的交互方式

    

五、Filter 的注冊

  Filter 的注冊有兩種方式,一種是全局注冊,另一種的區域注冊

  • 全局注冊是在Startup.cs 中進行注冊。注冊后用於所有的Request
  • 區域注冊是在Controller或者Action 上面加上[TypeFilter(type)]

六、項目案例(區域)

  • 定義ActionFilter:

public class HandleLoginAsyncAttribute : IAsyncActionFilter
    {
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            context.HttpContext.Session.TryGetValue("Aju_Prince_OperatorProvider_20190708", out var result);
            if (result == null)
            {
                context.Result = new RedirectResult("/Login/Index");
                return;
            }
            await next.Invoke();
        }
    }
  • 使用:

        

七、項目案例(全局)

  • Filter定義

  

  • 注冊

     

參考:

  ASP.NET Core Filters

  ASP.NET Core 教學 - Filters

 

(本人堅信:學習是由淺到深的過程)

    不喜勿噴!謝謝!

  GitHub地址: https://github.com/AjuPrince/Aju.Carefree


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM