ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在.netcore程序中添加全局的异常过滤器

2021-07-19 22:33:29  阅读:234  来源: 互联网

标签:netcore AspNetCore Microsoft ExceptionContext Mvc context 过滤器 全局 public


作用:当程序运行时出现故障,但没有捕获的异常时,会进入异常过滤器,进行统一的处理。

  下面我们先来介绍下异常过滤器,.net core 过滤器需要实现IExceptionFilter接口

//IExceptionFilter有一个未实现的方法
 void OnException(ExceptionContext context);
   
// 摘要:

//异常筛选器的上下文,即Microsoft.AspNetCore.Mvc.filters.IExceptionFilter

//以及Microsoft.AspNetCore.Mvc.Filters.IAsyncExceptionFilter实现。 
    public class ExceptionContext : FilterContext
    {
        //
        // 摘要:
        //    获取或设置在执行操作时捕获的System.Exception。
        public virtual Exception Exception
        {
            get
            {
                throw null;
            }
            set
            {
            }
        }
        // 摘要:
        //     获取或设置的System.Runtime.ExceptionServices.ExceptionDispatchInfo

//Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Exception,如果此信息

//被抓获。
        public virtual ExceptionDispatchInfo ExceptionDispatchInfo
        {
            get
            {
                throw null;
            }
            set
            {
            }
        }
        // 摘要:
        //   获取或设置Microsoft.AspNetCore.Mvc.Filters.ExceptionContext.Exception
//已经处理好了。
        public virtual bool ExceptionHandled
        {
            [CompilerGenerated]
            get
            {
                throw null;
            }
            [CompilerGenerated]
            set
            {
            }
        }
        //
        // 摘要:
        //     获取或设置Microsoft.AspNetCore.Mvc.IActionResult。
        public virtual IActionResult Result
        {
            [CompilerGenerated]
            get
            {
                throw null;
            }
            [CompilerGenerated]
            set
            {
            }
        } 
//实例化新的Microsoft.AspNetCore.Mvc.Filters.ExceptionContext实例。
// 参数:
//操作上下文:
//Microsoft.AspNetCore.Mvc.ActionContext。
//
//过滤器:

//所有适用的Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata实现。 
        public ExceptionContext(ActionContext actionContext, IList<IFilterMetadata> filters)
            : base(null, null)
        {
        }
    }

下面代码通过继承IExceptionFilter实现全局异常过滤器

/// <summary>
    /// 全局异常过滤器
    /// </summary>
    public class GlobalExceptionFilter : IExceptionFilter, IAsyncExceptionFilter
    {
        public void OnException(ExceptionContext context)
        {
//捕获到程序未处理的异常,通常是用文档记录下来
            LogHelper.Error(context.Exception);
    #region 此代码块中代码可以修改为自己的代码
            if (context.HttpContext.Request.IsAjaxRequest())
            {
                TData obj = new TData();
                obj.Message = context.Exception.GetOriginalException().Message;
                if (string.IsNullOrEmpty(obj.Message))
                {
                    obj.Message = "抱歉,系统错误,请联系管理员!";
                }
                context.Result = new JsonResult(obj);
                context.ExceptionHandled = true;
            }
            else
            {
                string errorMessage = context.Exception.GetOriginalException().Message;
                context.Result = new RedirectResult("~/Home/Error?message=" + HttpUtility.UrlEncode(errorMessage));
                context.ExceptionHandled = true;
            }
#endregion
        }

        public Task OnExceptionAsync(ExceptionContext context)
        {
            OnException(context);
            return Task.CompletedTask;
        }
    }
View Code

写好实现类后需要在.net core中服务管道中添加

找到Startup.cs文件,修改ConfigureServices方法如下

services.AddMvc(options =>
     {
       options.Filters.Add<HttpGlobalExceptionFilter>();
     });
View Code

 

标签:netcore,AspNetCore,Microsoft,ExceptionContext,Mvc,context,过滤器,全局,public
来源: https://www.cnblogs.com/topsyuan/p/15032621.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有