【问题标题】:Disable default use of Accept-Language header in ASP.Net Core在 ASP.Net Core 中禁用 Accept-Language 标头的默认使用
【发布时间】:2017-03-26 23:25:09
【问题描述】:

在 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:DefaultRequestCulture 添加到appsettings.json 文件中,以便可以在每个站点安装的基础上对其进行配置。

This documentation表示可以更改顺序,但遗憾的是没有提供如何更改的示例。

表示默认使用这三个provider:

  1. QueryStringRequestCultureProvider
  2. CookieRequestCultureProvider
  3. AcceptLanguageHeaderRequestCultureProvider

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

【问题讨论】:

    标签: asp.net .net asp.net-mvc asp.net-core .net-core


    【解决方案1】:

    就像您想从 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()
        };
    };
    

    【讨论】:

    • 谢谢!如果Startup.cs 具有 System.Linq 依赖项using System.Linq;,则第一种方法对我有用。我更喜欢第二个,因为它简洁,但是IRequestCultureProvider 接口不可用,我无法找到它的依赖关系。
    • IRequestCultureProviderMicrosoft.AspNetCore.Localization 包的一部分,位于同名命名空间中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    相关资源
    最近更新 更多