Многоязычная глобальная / настраиваемая обработка исключений в .NET Core 2.1 Web API - PullRequest
0 голосов
/ 24 октября 2018

В настоящее время я добавляю некоторые промежуточные программы в мой .NET Core 2.1 Web API проект для интеграции многоязычной поддержки и "как можно больше" REST / RFC-совместимый Механизм обработки исключений .

Что касается многоязычности, я начал со встроенного класса IStringLocalizer<T>, промежуточного программного обеспечения для локализации и регистрации служб внутри ConfigureServices и Configure методов в 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. На самом деле я не совсем понял, в чем разница (преимущества) между встроенным глобальным исключениемобработка и возможность создания пользовательского промежуточного программного обеспечения Exception.
  2. О соответствии RFC по обработке исключений, я выделил эту статью .Должен ли я использовать встроенный ProblemDetails .NET Core объект или я тоже могу использовать свой класс ErrorDetails?
...