【问题标题】:Asp.net core dosn't change the CultureInfoAsp.net 核心不会改变 CultureInfo
【发布时间】: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


【解决方案1】:

通过添加解决:

this.httpClient.defaults.headers["Accept-Language"] = "en-GB";

到 vue js - 使用 axios!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2017-10-23
    • 2017-09-08
    相关资源
    最近更新 更多