2016-11-13 4 views
2

В ASP.Net Ядра, У меня есть следующие настройки в документации по созданию культуры в применении:Отключить использование по умолчанию заголовок Accept-Language в ASP.Net Ядра

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:DefaultRequestCulture в файл appsettings.json, поэтому его можно настроить на основе установки на каждом сайте.

This documentation указывает, что заказ может быть изменен, но, к сожалению, не приводится пример того, как это сделать.

Это указывает на то, что эти три поставщика по умолчанию используются:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

Я не могу понять, как отключить третий. Я хочу, чтобы остальные оставались как есть, но для приложения полностью игнорировать HTTP-заголовок.

ответ

4

Как вы хотите удалить любой предмет из 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() 
    }; 
}; 
+0

Спасибо! Первый подход работал для меня при условии, что 'Startup.cs' имел зависимость System.Linq' using System.Linq; '. Я предпочел второй для краткого характера, но интерфейс IRequestCultureProvider не был доступен, и я не мог отследить зависимость для этого. –

+0

'IRequestCultureProvider' является частью пакета' Microsoft.AspNetCore.Localization' и находится в пространстве имен с тем же именем – Tseng

Смежные вопросы