使用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
时,当出现未捕获的以上发生时,我们如何规范的处理异常返回信息,以及如何记录日志的情况.
- 以上文档参考自
处理故障