zoukankan      html  css  js  c++  java
  • 【aspnetcore】异常捕捉可用知识点

    1、使用过滤器ExceptionFilter;补充:常用过滤器:AuthorizationFilter、ActionFilter、ResultFilter、ResourceFilter、ExceptionFilter。

    public class ErrorHandlerAttribute : TypeFilterAttribute
        {
            public ErrorHandlerAttribute() : base(typeof(ErrorHandlerFilter))
            {
            }
    
            private class ErrorHandlerFilter : IExceptionFilter
            {
                private readonly ILogger _log;
    
                public ErrorHandlerFilter(ILoggerFactory loggerFactory)
                {
                    _log = loggerFactory.CreateLogger("CustomerExceptionHandler");
                }
    
                public void OnException(ExceptionContext context)
                {
                    var message = context.Exception.Message;
                    var log = context.Exception.StackTrace;
    
                    _log.LogError(message, log);
                }
            }
        }

    注意这种方式并不能拦截输出,如果在action内抛出异常,会继续执行全局定义的异常处理程序。但可以用来记录异常。

    2、app.UseExceptionHandler("/Home/Error"),在action中使用下面的代码获取异常消息:

    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
    public IActionResult Error()
    {
        var exceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
        var message = exceptionHandlerFeature.Error.Message;

        if (HttpContext.Request.IsAjax())  // 自定义方法,是否是ajax请求
        {
            return Json(new {code = 500, message = message});
        }
        else
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }

    3、app.UseStatusCodePagesWithReExecute("/Home/Error/{0}") 和 app.UseStatusCodePagesWithRedirects("/Home/Error/{0}") 根据返回的status code指定异常的处理程序。

    第一个方法直接使用控制器home下的名为Error的Action处理请求,{0}会替换为status code,并返回处理结果(IActionResult),用这种方式,地址栏的url为原始请求的路径,而不是 /Home/Error/xxx。

    第二个方法是跳转到 /Home/Error/xxx 对应的页面,地址栏的url会显示为 /Home/Error/xxx

  • 相关阅读:
    字符串排序
    螺旋方阵
    Palindrome(最长回文串manacher算法)O(n)
    最长回文串(manacher算法)
    hdu 1236 1.3.2排名
    hdu 1062 Text Reverse
    VS2010/MFC对话框四:为控件添加消息处理函数
    VS2010/MFC对话框三:创建对话框类和添加控件变量
    VS2010/MFC对话框二:为对话框添加控件)
    VS2010/MFC对话框一:创建对话框模板和修改对话框属性
  • 原文地址:https://www.cnblogs.com/diwu0510/p/10103185.html
Copyright © 2011-2022 走看看