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 command lynx
    git bisect
    git blame (10)
    git crate&query&delete tag(九)
    git crate patch and check&apply patch(八)
    learning shell check host dependent pkg (8)
    【泛型】
    sql server 查询所有表的记录数
    【转】EXCEL中如何实现由总表自动得出分表
    MS Chart 打印
  • 原文地址:https://www.cnblogs.com/keo2013/p/3320703.html
Copyright © 2011-2022 走看看