在 ASP.Net 核心中禁用 Accept-Language header 的默认使用
Disable default use of Accept-Language header in 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
});
我已将 Settings:Culture:DefaultRequestCulture
添加到 appsettings.json
文件中,因此可以在每个站点安装的基础上对其进行配置。
This documentation 表示可以更改顺序,但遗憾的是没有提供如何更改的示例。
表示默认使用这三个provider:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
我不知道如何禁用第三个。我希望其他的保持原样,但应用程序完全忽略 HTTP header。
就像您想要从 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()
};
};
在 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:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
我不知道如何禁用第三个。我希望其他的保持原样,但应用程序完全忽略 HTTP header。
就像您想要从 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()
};
};