zoukankan      html  css  js  c++  java
  • 使用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时,当出现未捕获的以上发生时,我们如何规范的处理异常返回信息,以及如何记录日志的情况.

  • 相关阅读:
    NB-IOT终端应用场景
    开关量是什么信号,模拟量是什么信号
    模拟量设备为什么都用4~20mA传输信号
    物联网三大关键技术
    4~20mA.DC(1~5 V.DC)信号制的优点
    Lora在局域网中的优势
    NB-IoT终端在不同工作状态下的分析
    4G模块的串行AT命令发送未接收返回如何处理
    前端性能优化
    Tab:不可思议的CSS光标下划线跟随效果
  • 原文地址:https://www.cnblogs.com/HelloZyjS/p/12676436.html
Copyright © 2011-2022 走看看