使用ASP.NET Core 3.x 构建 RESTful API P15 处理故障

使用ASP.NET Core 3.x 构建 RESTful API P15 处理故障


博客园Id:


异常的处理:
在正常情况下,我们不应该直接让异常信息,暴露给接口的消费者,因为这个可能会暴露一些我们内部的一些业务的实现细节,并且在绝大多数情况下,异常的内容对于客户端来说是无用的,并且手动的去throw异常,或者通过try catch来处理异常,对性能的影响还是很大的,所以不建议这么做,但是在开发环境下,异常的抛出通常是有意义的,可以帮助开发人员更好的调试代码.

Development 即开发环境下,抛出异常应该是一件很正常的事情.在 Production 即生产环境下,就不应该抛出异常了,但是在Production下,我们有的时候又想返回出一些通用的异常信息,给消费者,那么我们应该怎么做呢?我们可以在Startup.cs类的Configure方法中添加如下中间件,实例代码如下:

if (env.IsDevelopment())    //判断当前运行的环境是否是开发环境
{
                /*
                 * 下列中间件是当,程序中有异常没有被捕获,通过此中间件会记录,并显示该异常信息
                 */
                app.UseDeveloperExceptionPage();
}
else  //其他环境
{
                /*
                 * 当有未处理的异常时,
                 * 在UseExceptionHandler 中间件中,我们可以给返回的异常,进行通用化处理
                 */
                app.UseExceptionHandler(appBuilder =>
                {
                    appBuilder.Run(async context =>
                    {
                        //在实际项目中,我们可以在此处记录一下异常的日志

                        context.Response.StatusCode = 500;  //设置异常之后的 HttpStatusCode 都是500
                        await context.Response.WriteAsync("Unexpected Error!");  //指定返回的异常信息
                    });
                });
}

上述代码的含义是,当当前运行环境为非Development时,当出现未捕获的以上发生时,我们如何规范的处理异常返回信息,以及如何记录日志的情况.

原文地址:https://www.cnblogs.com/HelloZyjS/p/12676436.html