首页 > 解决方案 > .NET Core 2.1 Web API 中的多语言全局/自定义异常处理

问题描述

我目前正在我的.NET Core 2.1 Web API项目中添加一些中间件,以集成多语言支持“尽可能”符合 REST/RFC的异常处理机制

关于多语言,我从类中的内置IStringLocalizer<T>类、本地化中间件和服务注册ConfigureServicesConfigure方法开始Startup,然后创建文化的特定 RESX 文件。

对于异常处理,我还使用了app.UseExceptionHandler()内置的中间件,如下所示:

public static class ExceptionHandler
{
    public static void UseGlobalExceptionHandler(this IApplicationBuilder app)
    {
        app.UseExceptionHandler(config =>
        {
            config.Run(async context =>
            {
                context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                context.Response.ContentType = "application/json";

                var errorFeature = context.Features.Get<IExceptionHandlerFeature>();
                if (errorFeature != null)
                {
                    Exception ex = errorFeature.Error;
                    ErrorDetails errorDetails = new ErrorDetails
                    {
                        StatusCode = context.Response.StatusCode,
                        Message = ex.Message
                    };

                    Log.Error(ex, "Request error {ErrorDetails}", errorDetails);
                    await context.Response.WriteAsync(errorDetails.ToString());
                }
            });
        });
    }
}

现在我想让多语言支持和异常处理一起工作,自定义错误详细信息文本的语言。

这些内置 .NET Core 对象是否有最佳实践或“标准”众所周知的方法?

还有一些附带问题:

  1. 我实际上并没有真正理解内置全局异常处理和创建自定义异常中间件的可能性之间的区别(好处)是什么。
  2. 关于异常处理的 RFC 合规性,我把这篇文章红了。我应该使用内置的ProblemDetails.NET Core 对象还是也可以使用我的ErrorDetails类?

标签: c#restasp.net-coreexception-handlingmultilingual

解决方案


推荐阅读