asp.net-core-mvc - ASP.Net Core CookieRequestCultureProvider 不工作
问题描述
我有一个带有以下 startup.cs 的 ASP.Net Core 3.1 应用程序(我根据网络搜索尝试了以下配置的各种组合):
public void ConfigureServices(IServiceCollection services)
{
...
services.Configure<RequestLocalizationOptions>(options =>
{
options.RequestCultureProviders = new[] { new CookieRequestCultureProvider() };
});
和
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(options.Value);
在我的应用程序的登录方法中,我将 Culture Cookie 设置如下:
HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture([logged-in-user].CultureCode)));
在随后的请求中,我可以在浏览器开发工具的网络选项卡中看到 cookie:
en-ZA
然而,在服务器上,任何给定的请求仍然为我的开发环境维护默认的服务器文化(即)。(我通过检查System.Threading.Thread.CurrentThread.CurrentCulture.Name
我的服务器操作方法中的任何断点来看到这一点)
而且我在我的客户端和我的服务器之间遇到日期转换问题(例如,en-US
按照上面的屏幕截图,具有文化的客户端)向服务器发送 2009 年 3 月 5 日(3 月 5 日)的日期,服务器正在解释它如 5 月 3 日。
为什么我的服务器不支持 CultureCookie?我错过了什么?
解决方案
正如您所提到的,您已经在您的ConfigureServices
方法中注册了本地化服务。
我建议的方法是像这样使用它:
services.AddLocalization(options => options.ResourcesPath = "Resources");
services
.AddControllersWithViews()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
但不要忘记注册中间件:
// In StartUp.cs Configure method
var SupportedCultures = new CultureInfo[]
{
new CultureInfo("en"),
new CultureInfo("zh")
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture(defaultLanguage),
SupportedCultures = SupportedCultures,
SupportedUICultures = SupportedCultures
});
至于您的 cookie 结束时间问题,请尝试指定 cookie 的结束日期。像这样:
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions
{
Expires = DateTimeOffset.UtcNow.AddYears(1),
SameSite = SameSiteMode.None
});
推荐阅读
- node.js - 当pdf文件转换为图像和图像然后组合形成一个pdf时,Nodejs服务器出现代理错误
- aframe - 框架颜色变化
- android - Android Studio 模拟器无法在 Windows 11 上运行
- c# - appsettings.json 配置的迁移工具
- ruby-on-rails - 如果从外部路由,Rails 5 会清除会话变量
- shell - 从终端/C++ 程序启动时的不同 Python 版本
- php - Laravel 8 Google 和 Facebook 通过回调 URL 中的社交名流错误登录。错误太多重定向
- adfs - ADFS 将 wtrealm/wres 参数添加到声明提供程序的注销调用
- python - 在二分搜索中,为什么 mid = (left + (right - left)) // 2 比 mid = (left + right) // 2 好?
- python - 我如何在python中多次处理值错误异常