如果请求包含不受支持的文化,我如何在 http 请求和 http 响应之间添加默认文化?

How can i add a default culture between an http request and http response if the request contains an unsupported culture?

我有一个模板 asp.net 核心 mvc 项目,我想设置本地化。

我意识到,如果我设置我的默认 cultureinfo,那么如果它在 accept-language header 内,无论它的位置或优先级如何(q-factor 权重,它都会被选中).

所以我想出了根本不设置默认 cultureinfo 的想法,这样它就可以取决于请求的 header。它只有 1 个问题。我不确定如果 accept-header 包含我的应用程序不支持的区域性会发生什么。

是否有任何方法可以在请求和响应之间设置某种中间件,以便在请求包含不受支持的文化时设置默认文化?

这是我在 startup.cs 中的相关代码部分:

IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
    new CultureInfo("de"),
    new CultureInfo("en"),
    new CultureInfo("fr")
};

var localizationOptions = new RequestLocalizationOptions
{
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
};

app.UseRequestLocalization(localizationOptions);
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
    });
}

.Net Core 3.1 已附带 Globalization and Localization Middleware here. And this is built-in middleware for you Accept-Language.

因此,如果没有Accept-Language,默认的Culture就是Server Culture。如果你想设置你不确定的Server Culture,你可以写一个自定义中间件example来强制你的默认Culture