在 ASP.Net Core 中禁用 Accept-Language 标头的默认使用

d_e*_*ier 7 .net asp.net asp.net-mvc .net-core asp.net-core

在 ASP.Net Core 中,我根据有关在应用程序中建立文化的文档进行了以下设置:

var supportedCultures = new[]
{
  new CultureInfo("en-CA"),
  new CultureInfo("fr-CA"),
  new CultureInfo("fr"),
  new CultureInfo("en"),
  new CultureInfo("en-US"),
};

var defaultRequestCulture = Configuration["Settings:Culture:DefaultRequestCulture"];

if (defaultRequestCulture == null)
{ 
  defaultRequestCulture = "en-CA";
}

app.UseRequestLocalization(new RequestLocalizationOptions
{
  DefaultRequestCulture = new RequestCulture(defaultRequestCulture),
  SupportedCultures = supportedCultures,
  SupportedUICultures = supportedCultures
});
Run Code Online (Sandbox Code Playgroud)

我已将其添加Settings:Culture:DefaultRequestCultureappsettings.json文件中,因此可以在每个站点安装的基础上对其进行配置。

该文档表明可以更改顺序,但遗憾的是没有提供有关如何执行此操作的示例。

它表示默认使用这三个提供程序:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

我不知道如何禁用第三个。我希望其他的保持原样,但应用程序完全忽略 HTTP 标头。

Tse*_*eng 9

正如您希望从IList<T>.

var localizationOptions = new RequestLocalizationOptions
{
    SupportedCultures = ...,
    SupportedUICultures = ...,
    DefaultRequestCulture = new RequestCulture("en-US")
};

var requestProvider = localizationOptions.RequestCultureProviders.OfType<AcceptLanguageHeaderRequestCultureProvider>().First();
localizationOptions.RequestCultureProviders.Remove(requestProvider);
Run Code Online (Sandbox Code Playgroud)

要不就

var localizationOptions = new RequestLocalizationOptions
{
    SupportedCultures = ...,
    SupportedUICultures = ...,
    DefaultRequestCulture = new RequestCulture("en-US"),
    RequestCultureProviders = new List<IRequestCultureProvider>
    {
        // Order is important, its in which order they will be evaluated
        new QueryStringRequestCultureProvider(),
        new CookieRequestCultureProvider()
    };
};
Run Code Online (Sandbox Code Playgroud)