首页 新闻 会员 周边

.Net Core 多语言的 Cookie 名(CookieRequestCultureProvider.DefaultCookieName)不能修改的问题

0
[已解决问题] 解决于 2018-07-02 17:15

.Net Core 多语言,可以通过如下Action改变当前语言,lang可以是“en”,"zh-CHS" 等

[AllowAnonymous]
public IActionResult SetLang(string lang, string returnUrl = "/")
{
    Response.Cookies.Append(
        CookieRequestCultureProvider.DefaultCookieName, //默认 Cookie 名称是:.AspNetCore.Culture
        CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(lang))
        );
    return LocalRedirect(returnUrl);
}

但是,保存当前语言的Cookie的名称是 CookieRequestCultureProvider.DefaultCookieName,这是一个只读静态变量,默认值是 “.AspNetCore.Culture”。不想用这个Cookie名称,想改成类似“MyApp.Culture”名称。能做到吗?

大豆男生的主页 大豆男生 | 小虾三级 | 园豆:608
提问于:2018-07-02 09:40
< >
分享
最佳答案
0

参考 How to get CookieName used in CookieRequestCultureProvider? 中的回答:

var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();

// Find the cookie provider with LINQ
var cookieProvider = options.Value.RequestCultureProviders
    .OfType<CookieRequestCultureProvider>()
        .First();
// Set the new cookie name
cookieProvider.CookieName = "NEW-NAME";

app.UseRequestLocalization(options.Value);
奖励园豆:5
dudu | 高人七级 |园豆:30979 | 2018-07-02 10:43

果然可以了👍

Response.Cookies.Append("MyApp.Culture",
    CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(lang)));

关键是这里 app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>(),厉害了 dudu

大豆男生 | 园豆:608 (小虾三级) | 2018-07-02 17:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册