.Net Core AOP之IExceptionFilter


一、簡介

在.net core 中Filter分為以下六大類:

1、AuthorizeAttribute(權限驗證)

2、IResourceFilter(資源緩存)

3、IActionFilter(執行方法前后的記錄)

4、IResultFilter(結果生成前后擴展)

5、IAlwaysRun(響應結果的補充)

6、IExceptionFilter(異常處理)

二、使用

public class CustomerExceptionFilterAttribute : Attribute, IExceptionFilter, IAsyncExceptionFilter
    {

        /// <summary>
        /// 這里分別繼承了IExceptionFilter(同步)和IAsyncExceptionFilter(異步),當同步和異步都存在的時候會優先執行異步方法
        /// </summary>

        public void OnException(ExceptionContext context)
        {
            throw new NotImplementedException();
        }

        public Task OnExceptionAsync(ExceptionContext context)
        {
            // 判斷是否是ajax請求
            if(context.HttpContext.Request.Headers.ContainsKey("x-requested-with") && context.HttpContext.Request.Headers["x-requested-with"] == "XMLHttpRequest")
            {
                context.Result = new JsonResult(new { code = "-1", success = "true" });
            }
            else
            {
                context.HttpContext.Response.Redirect("/Home/Index"); // 頁面跳轉路徑可自定義
            }
            
            context.ExceptionHandled = true; // 表示當前異常被處理過
            return Task.CompletedTask;
        }
    }
public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();

            // 全局異常
            services.AddControllers(options =>
            {
                options.Filters.Add(new CustomerExceptionFilterAttribute());
            });
        }

 


免責聲明!

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



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