一、簡介
在.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()); }); }
