歡迎光臨
每天分享高質量文章

小白開學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


已同步到看一看
贊(0)

分享創造快樂