コード例 #1
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                //1 开发人员异常页 显示请求异常的详细信息。置于要捕获其异常的任何中间件前面
                //该页包括关于异常和请求的以下信息:
                //堆栈跟踪
                //查询字符串参数(如果有)
                //Cookie(如果有)
                //标头
                app.UseDeveloperExceptionPage();
            }
            else
            {
                //2 异常处理程序页
                //为生产环境配置自定义错误处理页,请使用异常处理中间件。
                //中间件
                //捕获并记录异常。
                //在备用管道中为指定的页或控制器重新执行请求。 如果响应已启动,则不会重新执行请求。
                app.UseExceptionHandler("/error");
                app.UseHsts();
            }

            app.UseExceptionHandler(errApp =>
            {
                errApp.Run(async context =>
                {
                    //3 访问异常lambda
                    //使用 IExceptionHandlerPathFeature 访问错误处理程序控制器或页中的异常和原始请求路径:
                    var exceptionHandlerPathFeature = context.Features.Get <IExceptionHandlerPathFeature>();
                    IKnownException knownException  = exceptionHandlerPathFeature.Error as IKnownException;
                    if (knownException == null)
                    {
                        var logger = context.RequestServices.GetService <ILogger <MyExceptionFilterAttribute> >();
                        logger.LogError(exceptionHandlerPathFeature.Error, exceptionHandlerPathFeature.Error.Message);
                        knownException = KnownException.Unknown;
                        context.Response.StatusCode = StatusCodes.Status500InternalServerError;
                    }
                    else
                    {
                        knownException = KnownException.FromKnownException(knownException);
                        context.Response.StatusCode = StatusCodes.Status200OK;
                    }
                    var jsonOptions = context.RequestServices.GetService <IOptions <JsonOptions> >();
                    context.Response.ContentType = "application/json; charset=utf-8";
                    await context.Response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(knownException, jsonOptions.Value.JsonSerializerOptions));
                });
            });

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
コード例 #2
0
ファイル: KnownException.cs プロジェクト: hd2y/MySamples
 /// <summary>
 /// 从已知异常信息中重新构造异常信息
 /// </summary>
 /// <param name="exception">已知异常</param>
 /// <returns>已知异常信息</returns>
 public static IKnownException FromKnownException(IKnownException exception)
 {
     return(new KnownException
     {
         Message = exception.Message, ErrorCode = exception.ErrorCode, ErrorData = exception.ErrorData
     });
 }
コード例 #3
0
        public void OnException(ExceptionContext context)
        {
            IKnownException knownException = context.Exception as IKnownException;

            if (knownException == null)
            {
                knownException = KnownException.Unknown;
                context.HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError;
            }
            else
            {
                knownException = KnownException.FromKnownException(knownException);
                context.HttpContext.Response.StatusCode = StatusCodes.Status200OK;
            }
            context.Result = new JsonResult(knownException)
            {
                ContentType = "application/json; charset=utf-8"
            };
        }
コード例 #4
0
        public void OnException(ExceptionContext context)
        {
            IKnownException knownException = context.Exception as IKnownException;

            if (knownException == null) //这是系统异常
            {
                knownException = KnownException.Unknown;
                context.HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError;

                //系统异常处理,可以写日志等操作,将真正的异常信息保存下来,
            }
            else //这是业务异常
            {
                knownException = KnownException.FromKnownException(knownException);
                context.HttpContext.Response.StatusCode = StatusCodes.Status200OK;
            }

            context.ExceptionHandled = true;
            context.Result           = new CustomExceptionResult(knownException.ErrorCode, knownException.Message);
        }
コード例 #5
0
        public override void OnException(ExceptionContext context)
        {
            IKnownException knownException = context.Exception as IKnownException;

            if (knownException == null)
            {
                var logger = context.HttpContext.RequestServices.GetService <ILogger <MyExceptionFilterAttribute> >();
                logger.LogError(context.Exception, context.Exception.Message);
                knownException = KnownException.Unknown;
                context.HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError;
            }
            else
            {
                knownException = KnownException.FromKnownException(knownException);
                context.HttpContext.Response.StatusCode = StatusCodes.Status200OK;
            }
            context.Result = new JsonResult(knownException)
            {
                ContentType = "application/json; charset=utf-8"
            };
        }
コード例 #6
0
        public void OnException(ExceptionContext context)
        {
            IKnownException knownException = context.Exception as IKnownException;

            if (knownException == null)
            {
                var logger = context.HttpContext.RequestServices.GetService <ILogger <CustomerExceptionFilter> >();
                logger.LogError(context.Exception, context.Exception.Message);
                // knownException = KnownException.Unknown;
                knownException = KnownException.FromKnownException(context.Exception);
                context.HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError;
            }
            else
            {
                knownException = KnownException.FromKnownException(knownException);
                context.HttpContext.Response.StatusCode = StatusCodes.Status200OK;
            }
            context.Result = new JsonResult(Result <object[]> .Instance(knownException.ErrorData, knownException.Message, knownException.ErrorCode)) //断路器
            {
                ContentType = "application/json; charset=utf-8"
            };
        }
コード例 #7
0
        private async Task HandleExceptionAsync(HttpContext httpContext, Exception ex)
        {
            // 在 Features 里面获取异常
            //var exceptionHandlerPathFeature = httpContext.Features.Get<IExceptionHandlerPathFeature>();

            // 1.识别异常是否为业务异常(IKnownException)
            IKnownException knownException = ex as IKnownException;

            // 2.为空系统异常,否则业务异常
            if (knownException == null)
            {
                knownException = KnownException.UnKnown;
                httpContext.Response.StatusCode = StatusCodes.Status500InternalServerError;
            }
            else
            {
                knownException = KnownException.FromKnownException(knownException);
                httpContext.Response.StatusCode = StatusCodes.Status400BadRequest;
            }

            // 3.把响应信息通过json 的方式输出出去
            httpContext.Response.ContentType = "application/json; charset=utf-8";
            await httpContext.Response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(knownException));
        }
コード例 #8
0
 public static IKnownException FromKnownException(IKnownException exception)
 {
     return(new KnownException(errorData: exception.ErrorData, errorCode: exception.ErrorCode, message: exception.Message));
 }
コード例 #9
0
 public static IKnownException FromKnownException(IKnownException exception)
 {
     return(new KnownException(exception.Message, exception.ErrorCode));
 }
コード例 #10
0
ファイル: KnownException.cs プロジェクト: dongyw521/geek_core
 public static IKnownException FromKnownException(IKnownException knownException)
 {
     return(new KnownException {
         Code = knownException.Code, Msg = knownException.Msg, Data = knownException.Data
     });
 }