Asp.net

在 ASP.Net Core 中禁用 Accept-Language 標頭的預設使用

  • November 13, 2016

在 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
});

我已將其添加Settings:Culture:DefaultRequestCultureappsettings.json文件中,以便可以在每個站點安裝的基礎上對其進行配置。

該文件表明可以更改順序,但遺憾的是沒有提供有關如何執行此操作的範例。

它表示預設使用這三個提供程序:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

我不知道如何禁用第三個。我希望其他的保持原樣,但讓應用程序完全忽略 HTTP 標頭。

就像您想從IList<T>.

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

var requestProvider = localizationOptions.RequestCultureProviders.OfType<AcceptLanguageHeaderRequestCultureProvider>().First();
localizationOptions.RequestCultureProviders.Remove(requestProvider);

要不就

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()
   };
};

引用自:https://stackoverflow.com/questions/40569863