[Asp.Net Core]ExceptionFilter

Posted 厦门德仔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Asp.Net Core]ExceptionFilter相关的知识,希望对你有一定的参考价值。

ExceptionFilter

1.自定义一个CustomExceptionFilterAttribute ,实现IExceptionFilter接口,

2.实现方法,先判断,异常是否被处理过,如果没有被处理过,就处理;

3.分情况处理:1.如果是ajax请求,就返回JosnResult,如果不是Ajax请求,就返回错误页面

public class CustomExceptionFilterAttribute : Attribute, IExceptionFilter
   
       private IModelMetadataProvider _modelMetadataProvider =null;
       public CustomExceptionFilterAttribute(IModelMetadataProvider modelMetadataProvider)
       
           _modelMetadataProvider = modelMetadataProvider;
       
       /// <summary>
       /// 当异常发生的时候触发到这儿来
       /// </summary>
       /// <param name="context"></param>
       public void OnException(ExceptionContext context)
       
           if (!context.ExceptionHandled) //异常是否被处理过
           
               //在这里处理 如果是Ajax请求===返回Json
               if (this.IsAjaxRequest(context.HttpContext.Request))//header看看是不是
XMLHttpRequest
               
                   context.Result = new JsonResult(new
                   
                       Result = false,
                       Msg = context.Exception.Message
                   );//中断式---请求到这里结束了,不再继续Action
               
               else
               
                   //跳转到异常页面
                   var result = new ViewResult  ViewName = "~/Views/Shared/Error.cshtml" ;
                   result.ViewData = new ViewDataDictionary(_modelMetadataProvider, 
context.ModelState);
                   result.ViewData.Add("Exception", context.Exception);
                   context.Result = result; //断路器---只要对Result赋值--就不继续往后了;
               
               context.ExceptionHandled = true;
            
       
       private bool IsAjaxRequest(HttpRequest request)
       
           string header = request.Headers["X-Requested-With"];
           return "XMLHttpRequest".Equals(header);
       
   

4.全局注册,在Starup中的ConfigureServices注册

services.AddMvc(option=> 
               //option.Filters.Add<CustomActionFilterAttribute>(); //全局注册:
               //option.Filters.Add<CustomGlobalActionFilterAtrribute>();
               option.Filters.Add<CustomExceptionFilterAttribute>();
           );

5.测试

       // [TypeFilter(typeof(CustomExceptionFilterAttribute))]
        public IActionResult IndexException() 
        
            int i = 0;
            int j = 1;
            int k = j / i;//一定会发生异常
            return View();
        

以上是关于[Asp.Net Core]ExceptionFilter的主要内容,如果未能解决你的问题,请参考以下文章

Asp.NET Core进阶 第四篇 Asp.Net Core Blazor框架

.NET Core 1.0ASP.NET Core 1.0和EF Core 1.0简介

asp.net core 注入后仍然报错?

深入研究 Mini ASP.NET Core(迷你 ASP.NET Core),看看 ASP.NET Core 内部到底是如何运行的

.Net Core 学习 - ASP.NET Core 概念学习

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门