【发布时间】:2023-03-25 22:46:01
【问题描述】:
-
我第一次使用“en-GB”调用该方法 那么 test2 是 en-GB。
-
我第二次调用该方法,测试直到俄语,我该如何解决这个问题?
services.Configure<RequestLocalizationOptions>(options =>
{
var defaultCulture = new CultureInfo("ru-RU");
var englishCulture = new CultureInfo("en-GB");
var supportedCultures = new List<CultureInfo>
{
defaultCulture,
englishCulture
};
options.DefaultRequestCulture = new RequestCulture(defaultCulture,defaultCulture);
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
var defaultCookieRequestProvider = options.RequestCultureProviders
.FirstOrDefault(rcp => rcp.GetType() == typeof(CookieRequestCultureProvider));
if (defaultCookieRequestProvider != null)
options.RequestCultureProviders.Remove(defaultCookieRequestProvider);
options.RequestCultureProviders
.Insert(0,
new CookieRequestCultureProvider()
{
CookieName = CookieRequestCultureProvider.DefaultCookieName,
Options = options
});
});
我有
var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(options.Value);
Controller - 第二次调用它仍然是俄语而不是英语
public async Task ChangeLocalization([FromBody] LocalizationDto inDto)
{
var test = CultureInfo.CurrentUICulture;
var settedCulture = new CultureInfo(inDto.CurrentCultureName);
Thread.CurrentThread.CurrentCulture = settedCulture;
Thread.CurrentThread.CurrentUICulture = settedCulture;
if (HttpContext.Request.Cookies.ContainsKey(CookieRequestCultureProvider.DefaultCookieName))
HttpContext.Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName);
HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(settedCulture, settedCulture)));
var test2 = CultureInfo.CurrentUICulture;
}
同样的问题:
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(settedCulture)),
new Microsoft.AspNetCore.Http.CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) });
通过添加解决: this.httpClient.defaults.headers["Accept-Language"] = "en-GB"; vue js
【问题讨论】:
-
可能是,默认情况下,在接受 cookie 同意之前,cookie 不会发送到浏览器。解决方法是将语言 cookie 标记为必不可少。
-
我该怎么做?我也在使用一个 vue js 来调用这个方法
-
Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(settedCulture)), new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1), IsEssential = true, //critical应用新文化的设置 Path = "/", HttpOnly = false, } );
-
试过了,还是不行
-
您能否将您的解决方案添加为答案,但不要将其添加到您的问题中以结束这种情况?非常感谢先生。
标签: c# asp.net asp.net-core webapi