应用程序未处理的异常本地化

时间:2018-08-28 03:37:06

标签: asp.net-mvc asp.net-core .net-core globalization asp.net-core-localization

我正在尝试以语言环境语言显示错误消息,对于所有已处理的异常,我的团队正在使用资源文件以本地语言显示,但是 有没有办法拦截中间件以使用语言环境语言显示应用程序未处理异常?

2 个答案:

答案 0 :(得分:0)

在我们应用的开始附近,我们有一行看起来类似于

的代码
    config.Services.Replace(typeof(IExceptionHandler), new UnhandledExceptionHandler());

这似乎捕获了错误。

我们的路线表的末尾还有一条通通的路线,看起来有点像

        config.Routes.MapHttpRoute(
            name: "NotImplemented",
            routeTemplate: "{*data}",
            defaults: new { controller = "Error", action = "notimplemented", data = UrlParameter.Optional });

我们在其中调用相同的代码。您可以检查Accept-Language标头,以最好地猜测呼叫者可能使用的语言环境。如果您在这方面需要帮助,请重新发布一个特定的问题。

答案 1 :(得分:0)

标准.NET异常已本地化,消息语言将取决于当前的线程区域性。因此,要使其生效,您将需要实现RequestCultureMiddleware,该软件将根据您的需求更改语言。这是一个示例:

public class RequestCultureMiddleware
{
    private readonly RequestDelegate next;

    public RequestCultureMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        // Get it from HTTP context as needed
        var language = "fr-FR";

        var culture = new System.Globalization.CultureInfo(language);
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;
        await next(context);
    }
}

Startup类中在MVC之前注册它:

app.UseMiddleware(typeof(RequestCultureMiddleware));
app.UseMvc();

请注意:此处不包括显示异常消息。