在.netcore程序中添加全局的异常过滤器
2021/7/19 22:34:55
本文主要是介绍在.netcore程序中添加全局的异常过滤器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
作用:当程序运行时出现故障,但没有捕获的异常时,会进入异常过滤器,进行统一的处理。
下面我们先来介绍下异常过滤器,.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程序中添加全局的异常过滤器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#