小白開學Asp.Net Core 《五》

小白開學Asp.Net Core《五》

                              —— 使用.Net Core MVC Filter

 

1、簡介

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

2、Filter 簡介

  Filter俗稱過濾器,它的做用是在Action方法執行先後作一些處理。它在Mvc Action 管道中運行,因此也能夠叫作過濾器管道。git

                         

3、Filter的執行順序

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

  在.Net Core MVC 中新增了異步過濾器,若是提供了異步和同步過濾器,那麼將執行異步過濾器,同步過濾器將不會執行。 mvc

              

    (圖片來自 John Wu 的博客異步

  • Authorization Filter

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

  • Resource Filter

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

  • Action Filter 

   Action Filter 這個過濾器是最經常使用到的過濾器,在調用Action方法先後執行,在Model Binding以後執行,在使用上沒什麼特別注意的,俗稱 方法過濾器學習

  • Exception Filter

   Exception Filter 經常用於應用程序執行異常是記錄日誌spa

  • Result Filter

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

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

    

5、Filter 的註冊

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

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

6、項目案例(區域)

  • 定義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();
        }
    }
  • 使用:

        

7、項目案例(全局)

  • Filter定義

  

  • 註冊

     

參考:

  ASP.NET Core Filters

  ASP.NET Core 教學 - Filters

 

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

    不喜勿噴!謝謝!

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

相關文章
相關標籤/搜索