public async Task Invoke(HttpContext httpContext)
        {
            try
            {
                await _next(httpContext);
            }
            catch (Exception ex)
            {
                LogHelper.Logger.Fatal(ex,
                                       $"【异常信息】:{ex.Message} 【请求路径】:{httpContext.Request.Method}:{httpContext.Request.Path}\n " +
                                       $"【UserHostAddress】:{ LionWeb.GetClientIp()} " +
                                       $"【UserAgent】:{ httpContext.Request.Headers["User-Agent"]}");

                if (ex is CustomSystemException se)
                {
                    await ExceptionResult(httpContext, new ResponseModel().Fail(se.Code, se.Message, "").ToJson(true, isLowCase: true));
                }
                else if (ex is DataValidException de)
                {
                    await ExceptionResult(httpContext, new ResponseModel().Fail(de.Code, de.Message, "").ToJson(true, isLowCase: true));
                }
                else
                {
#if DEBUG
                    Console.WriteLine(ex);
                    var content = ex.Message;
#else
                    var content = "系统错误,请稍后再试或联系管理人员。";
#endif
                    await ExceptionResult(httpContext, new ResponseModel().Fail(ResponseCode.UnknownEx, content, "").ToJson(true, isLowCase: true));
                }
            }
        }
Example #2
0
        public override void OnActionExecuting(ActionExecutingContext context)
        {
#if DEBUG
            LogHelper.Logger.Debug(
                "[Ip]:{0}\n [Arguments]:{1}\n [Headers]:{2}\n ",
                LionWeb.GetClientIp(),
                context.ActionArguments.ToJson(true),
                context.HttpContext.Request.Headers.ToJson(true)
                );

            _stopWatch = new Stopwatch();
            _stopWatch.Start();
#endif
            base.OnActionExecuting(context);
        }
Example #3
0
        public override void OnException(ExceptionContext filterContext)
        {
            if (filterContext.ExceptionHandled)
            {
                return;
            }

            var controllerName = (string)filterContext.RouteData.Values["controller"];
            var actionName     = (string)filterContext.RouteData.Values["action"];
            var request        = filterContext.HttpContext.Request;

            LogHelper.Logger.Fatal(filterContext.Exception,
                                   $"【异常信息】:{filterContext.Exception.Message}  【请求路径】:{request.Method}:{request.Path}\n " +
                                   $"【Controller】:{controllerName} - 【Action】:{actionName}\n " +
                                   $"【UserHostAddress】:{ LionWeb.GetClientIp()} " +
                                   $"【UserAgent】:{ request.Headers["User-Agent"]}");

            if (filterContext.Exception is CustomSystemException se)
            {
                filterContext.Result = new CustomHttpStatusCodeResult(200, se.Code, se.Message);
            }
            else if (filterContext.Exception is DataValidException de)
            {
                filterContext.Result = new CustomHttpStatusCodeResult(200, de.Code, de.Message);
            }
            else
            {
                var content = "";
#if DEBUG
                Console.WriteLine(filterContext.Exception);
                content = filterContext.Exception.Message;
#else
                content = "系统错误,请稍后再试或联系管理人员。";
#endif
                filterContext.Result = new CustomHttpStatusCodeResult(200, ResponseCode.UnknownEx, content);
            }
            filterContext.ExceptionHandled = true;
            // 处理完异常之后,请记得将此属性更改为true,表明已经处理过了。将不会
            // 处理范围仅限于MVC中间件,若要捕捉MVC中间件之前的异常,
            // 请使用ExceptionHandlerMiddleware中间件来处理,因为在管道中放置在第一个位置
        }
Example #4
0
        /// <summary>
        /// 自定义的错误拦截管道来作为处理程序
        /// </summary>
        /// <param name="httpContext"></param>
        /// <param name="next"></param>
        /// <returns></returns>
        private async Task CustomExceptionHandler(HttpContext httpContext, Func <Task> next)
        {
            //该信息由ExceptionHandlerMiddleware中间件提供,里面包含了ExceptionHandlerMiddleware中间件捕获到的异常信息。
            var exceptionDetails = httpContext.Features.Get <IExceptionHandlerFeature>();
            var ex = exceptionDetails?.Error;

            if (ex != null)
            {
                LogHelper.Logger.Fatal(ex, $"【异常信息】:{ex.Message} 【请求路径】:{httpContext.Request.Method}:{httpContext.Request.Path}\n " + $"【UserHostAddress】:{LionWeb.GetClientIp()} " + $"【UserAgent】:{httpContext.Request.Headers["User-Agent"]}");

                if (ex is CustomSystemException se)
                {
                    await ExceptionResult(httpContext, new ResponseModel().Fail(se.Code, se.Message, "").ToJson(true, isLowCase: true));
                }
                else if (ex is DataValidException de)
                {
                    await ExceptionResult(httpContext, new ResponseModel().Fail(de.Code, de.Message, "").ToJson(true, isLowCase: true));
                }
                else
                {
#if DEBUG
                    Console.WriteLine(ex);
                    var content = ex.Message;
#else
                    var content = "系统错误,请稍后再试或联系管理人员。";
#endif
                    await ExceptionResult(httpContext, new ResponseModel().Fail(ResponseCode.UnknownEx, content, "").ToJson(true, isLowCase: true));
                }
            }
        }