您现在的位置是:网站首页> 编程资料编程资料
asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1)_实用技巧_
2023-05-24
307人已围观
简介 asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1)_实用技巧_
简介
异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器。用于在系统出现未捕获异常时的处理。
实现一个自定义异常过滤器
自定义一个全局异常过滤器需要实现IExceptionFilter接口
public class HttpGlobalExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { throw new NotImplementedException(); } } IExceptionFilter接口会要求实现OnException方法,当系统发生未捕获异常时就会触发这个方法。OnException方法有一个ExceptionContext异常上下文,其中包含了具体的异常信息,HttpContext及mvc路由信息。系统一旦出现未捕获异常后,比较常见的做法就是使用日志工具,将异常的详细信息记录下来,方便修正调试。下面是日志记录的实现。
////// 全局异常过滤器 /// public class HttpGlobalExceptionFilter : IExceptionFilter { readonly ILoggerFactory _loggerFactory; readonly IHostingEnvironment _env; public HttpGlobalExceptionFilter(ILoggerFactory loggerFactory, IHostingEnvironment env) { _loggerFactory = loggerFactory; _env = env; } public void OnException(ExceptionContext context) { var logger = _loggerFactory.CreateLogger(context.Exception.TargetSite.ReflectedType); logger.LogError(new EventId(context.Exception.HResult), context.Exception, context.Exception.Message); var json = new ErrorResponse("未知错误,请重试"); if (_env.IsDevelopment()) json.DeveloperMessage = context.Exception; context.Result = new ApplicationErrorResult(json); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; context.ExceptionHandled = true; } public class ApplicationErrorResult : ObjectResult { public ApplicationErrorResult(object value) : base(value) { StatusCode = (int)HttpStatusCode.InternalServerError; } } public class ErrorResponse { public ErrorResponse(string msg) { Message = msg; } public string Message { get; set; } public object DeveloperMessage { get; set; } }
注册全局过滤器
过滤器已经编写完毕,接下来就需要在asp.net core MVC中注册。找到系统根目录Startup.cs文件,修改ConfigureServices方法如下
services.AddMvc(options => { options.Filters.Add(); }); 测试
在请求中抛出一个异常

日志正确捕获到异常信息

浏览器返回500错误,并且返回自定义的错误信息。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
您可能感兴趣的文章:
相关内容
- VS2015 IIS Express无法启动的解决方法_实用技巧_
- ASP.NET MVC下Bundle的使用方法_实用技巧_
- 浅谈Asp.net Mvc之Action如何传多个参数的方法_实用技巧_
- Razor模板引擎简单介绍_实用技巧_
- 微信语音上传 下载功能实例代码_实用技巧_
- ASP.Net MVC 布局页、模板页使用方法详细介绍_实用技巧_
- 基于MVC4+EasyUI的Web开发框架之附件上传组件uploadify的使用_实用技巧_
- VS2015下简单使用EF框架的方法_实用技巧_
- Asp.net MVC中Razor常见的问题与解决方法总结_实用技巧_
- .NET中接口与类的区别浅析_实用技巧_
