本文旨在:
1 继承ExceptionFilterattribute,重写Override OnException(ExceptionContext context)处理异常
2 使用.netCore的依赖注入,在属性中注入日志框架,记录异常日志
以下详细回答以上两个问题:
1 继承ExceptionFilterattribute,重写Override OnException(ExceptionContext context)处理异常
新建class文件,命名ExceptionHandler,继承特性ExceptionFilterattribute,重写 OnException,处理异常 重新赋值请求页面返回的Result,返回json,string content,Error Page三种形式
public class ExceptionHandle : ExceptionFilterattribute { public override void OnException(ExceptionContext context) { var ex = context.Exception; var controllername = context.RouteData.Values["controller"].ToString(); var actionname = context.RouteData.Values["action"].ToString(); if (context.ExceptionHandled == false) { context.Result= ReturnResult(resultType.ContentResult,ex); } context.ExceptionHandled = true; //异常已处理了 } }
处理异常返回的Result:共三种形式 Page,Json,html content
private IActionResult ReturnResult(resultType rtype, Exception ex) { IActionResult result; switch (rtype) { case resultType.ContentResult: result = new ContentResult { Content = ex.Message, StatusCode = StatusCodes.Status500InternalServerError, ContentType = "text/html;charset=utf-8" }; break; case resultType.JsonResult: result = new JsonResult(new { msg = ex.Message }); break; case resultType.Redirect: result = new RedirectToRouteResult( new RouteValueDictionary{ { "controller","Home"}, {"action","Error" }, {"msg",ex.Message } } ); break; default: result = new RedirectResult("../home/error"); break; } return result; } enum resultType { ContentResult = 1, JsonResult = 2, Redirect = 3 }
2 使用.netCore的依赖注入,在属性中注入日志框架,记录异常日志
startup.cs 依赖注入容器:
public void ConfigureServices(IServiceCollection services) { ... services.AddScoped<ExceptionHandle>(); }
构造函数注入参数 logger
public class ExceptionHandle : ExceptionFilterattribute { private readonly ILogger<ExceptionHandle> _logger; public ExceptionHandle(ILogger<ExceptionHandle> logger) { _logger = logger; } public override void OnException(ExceptionContext context) { _logger.LogError(ex.Message, context.Exception);//调用 } }
Action调用:ServiceFilter
[ServiceFilter(typeof(ExceptionHandle))] public IActionResult Index(DateTime dt, long sjc) { var chushu = 0; var i = 1 / chushu; return View() }
总结:定义继承自ExceptionFilterattribute属性类的Filter文件类,重写OnException方法,如果不需要在属性类中做写日志,则删掉构造函数,自然也不需要在startup.cs文件中做依赖注入,用法也不需要使用
[ServiceFilter(typeof(ExceptionHandle))] 使用最传统的[ExceptionHandle]即可
//[ServiceFilter(typeof(ExceptionHandle))]
[ExceptionHandle]
public IActionResult Index(DateTime dt, long sjc) { var chushu = 0; var i = 1 / chushu; return View() }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。