1. 程式人生 > >.net core MVC Filters 過濾器的使用

.net core MVC Filters 過濾器的使用

告訴 execute 動作 ttr nac pre tel cor 攔截

一、過濾器的優級依次介紹如下(逐次遞減):

  Authorization Filter -> Resource Filter -> Acton Filter -> Exception Filter -> Result Filter

  1、Authorization Filter (權限過濾器)

    /// <summary>
    /// 權限過濾器
    /// </summary>
    public class GlobalAuthorizationFilter : Attribute, IAuthorizationFilter
    {
        
/// <summary> /// 優化權最高的過濾器 /// </summary> /// <param name="context"></param> public void OnAuthorization(AuthorizationFilterContext context) { //context.Result = new ObjectResult("IAuthorizationFilter 過濾輸出"); Console.WriteLine("
IAuthorizationFilter 過濾輸出"); } }

  2、Resource Filter (資源過濾器)

    /// <summary>
    /// 資源過濾器
    /// </summary>
    public class GlobalResourceFilter : IResourceFilter
    {
        /// <summary>
        /// 獲取資源後攔截
        /// </summary>
        /// <param name="context"></param>
public void OnResourceExecuted(ResourceExecutedContext context) { Console.WriteLine("IResourceFilter OnResourceExecuted 輸出"); } /// <summary> /// 獲取資源前攔截 /// </summary> /// <param name="context"></param> public void OnResourceExecuting(ResourceExecutingContext context) { Console.WriteLine("IResourceFilter OnResourceExecuting 輸出"); } }

  3、Acton Filter

    /// <summary>
    /// Acion過濾器
    /// </summary>
    public class GlobalActonFilter : Attribute, IActionFilter
    {
        /// <summary>
        /// Acion 執行後攔截
        /// </summary>
        /// <param name="context"></param>
        public void OnActionExecuted(ActionExecutedContext context)
        {
            Console.WriteLine("IActionFilter OnActionExecuted Acion 執行後攔截");
        }

        /// <summary>
        /// Acion 執行前攔截
        /// </summary>
        /// <param name="context"></param>
        public void OnActionExecuting(ActionExecutingContext context)
        {
            Console.WriteLine("IActionFilter OnActionExecuting Acion 執行前攔截");
        }
    }

  4、Exception Filter

    /// <summary>
    /// 異常全局過濾器
    /// </summary>
    public class GlobalExceptionFilter : IExceptionFilter
    {
        /// <summary>
        /// 異常處理
        /// </summary>
        /// <param name="context">異常上下文</param>
        public void OnException(ExceptionContext context)
        {
            Console.WriteLine(context.Exception);
            //如果這裏設為false,就表示告訴MVC框架,我沒有處理這個錯誤。然後讓它跳轉到自己定義的錯誤頁(設為true的話,就表示告訴MVC框架,異常我已經處理了。不需要在跳轉到錯誤頁了,也部會拋出黃頁了)
            context.ExceptionHandled = false;
        }
    }

  5、Result Filter

    /// <summary>
    /// 結果過濾器
    /// </summary>
    public class GlobalResultFilter : IResultFilter
    {
        /// <summary>
        /// 動作結果執行後
        /// </summary>
        /// <param name="context"></param>
        public void OnResultExecuted(ResultExecutedContext context)
        {
            Console.WriteLine("IResultFilter OnResultExecuted Acion 動作結果執行後");
        }

        /// <summary>
        /// 動作結果執行前
        /// </summary>
        /// <param name="context"></param>
        public void OnResultExecuting(ResultExecutingContext context)
        {
            Console.WriteLine("IResultFilter OnResultExecuting Acion 動作結果執行前");
        }
    }

.net core MVC Filters 過濾器的使用