zoukankan      html  css  js  c++  java
  • 在MVC中添加异常增加日志

    MVC的结构非常棒,基本你能想到注入的地方都可以找到地方,譬如IActionFilter,IResultFilter,IAuthorizationFilter以及IExceptionFilter

    以下是测试过比较好的通用异常处理

    public virtual void OnException(ExceptionContext filterContext)
            {
                if (filterContext.IsChildAction)
                    return;
    
                if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
                    return;
    
                var statusCode = (int)HttpStatusCode.InternalServerError;
                if (filterContext.Exception is HttpException)
                {
                    var httpException = filterContext.Exception as HttpException;
                    statusCode = httpException.GetHttpCode();
                }
                else if (filterContext.Exception is UnauthorizedAccessException)
                {
                    statusCode = (int)HttpStatusCode.Forbidden;
                }
    
                //记录日志
                _logger.Error("未捕获的异常", filterContext.Exception);
    
                if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
                {
                    ReturnStatus status = new ReturnStatus
                    {
                        Status = false,
                        //Todo:json错误类型分类模板
                        ErrorMessage = filterContext.Exception.Message,
                        Url = "/"
                    };
                    JsonResult jsonResult = new JsonResult();
                    jsonResult.Data = status;
                    jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
                    filterContext.Result = jsonResult;
                }
                else
                {
                    var result = CreateActionResult(filterContext, statusCode);
                    filterContext.Result = result;
                }
    
    
                filterContext.ExceptionHandled = true;
                filterContext.HttpContext.Response.Clear();
                filterContext.HttpContext.Response.StatusCode = statusCode;
                filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
            }
    

      

  • 相关阅读:
    linux本地文件上传之RZ/SZ和sftp
    sql优化
    sql server 类oracle vm_contact() 函数创建
    sql server 执行大.sql文件
    group by having和connect by
    sql server内置函数
    oracle内置函数
    oracle字符串处理函数
    oracle字符串处理相关
    团队-象棋游戏-模块开发过程
  • 原文地址:https://www.cnblogs.com/keo2013/p/3320703.html
Copyright © 2011-2022 走看看