Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Disable default use of Accept-Language header in ASP.Net Core

In ASP.Net Core, I have the following setup per the documentation on establishing the culture in the application:

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

I've added the Settings:Culture:DefaultRequestCulture to the appsettings.json file so it can be configured on a per site installation basis.

This documentation indicates that the order can be changed, but unfortunately doesn't provide the example on how to do it.

It indicates that these three providers are used by default:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

I cannot figure out how to disable the third. I want the other ones to remain as is, but for the application to disregard the HTTP header entirely.

like image 950
d_ethier Avatar asked Nov 13 '16 02:11

d_ethier


1 Answers

Just as you'd like remove any item from an IList<T>.

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

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

Or just

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()
    };
};
like image 123
Tseng Avatar answered Nov 03 '22 00:11

Tseng