C# 如何更改ASP.net Core 3.1中的CurrentCulture

C# 如何更改ASP.net Core 3.1中的CurrentCulture,c#,asp.net,asp.net-core,localization,C#,Asp.net,Asp.net Core,Localization,多语言应用程序调用我的API,我想返回消息,基于应用程序语言而不是基于应用程序文化。因此,我决定使用本地化,但当前文化不会随此代码而改变。 大概是这样的: [HttpPost("[action]/{languageid}")] public async Task<IActionResult> login([FromBody] AccountViewModel model, [FromRoute] int languageid) { var result =

多语言应用程序调用我的API,我想返回消息,基于应用程序语言而不是基于应用程序文化。因此,我决定使用本地化,但当前文化不会随此代码而改变。 大概是这样的:

[HttpPost("[action]/{languageid}")]
public async Task<IActionResult> login([FromBody] AccountViewModel model, [FromRoute] int languageid)
{
    var result = await signInManager.CheckPasswordSignInAsync(model.UserName, model.Password, true);
    CultureInfo cultureInfo;
    if(languageid == 1)
    {
        cultureInfo = new CultureInfo("fa-IR");
    }
    else
    {
        cultureInfo = new CultureInfo("en-US");

    }
    Thread.CurrentThread.CurrentCulture = cultureInfo;
    if (result)
        return Ok(new {Result = true , Message = _localize["Login-Success"] });

    return Ok(new { Result = false, Message = _localize["Login-failed"] });

}
[HttpPost(“[action]/{languageid}”)]
公共异步任务登录([FromBody]AccountViewModel模型,[FromRoute]int languageid)
{
var result=wait signInManager.CheckPasswordSignInAsync(model.UserName,model.Password,true);
文化信息文化信息;
if(languageid==1)
{
cultureInfo=新的cultureInfo(“fa IR”);
}
其他的
{
cultureInfo=新的cultureInfo(“美国”);
}
Thread.CurrentThread.CurrentCulture=cultureInfo;
如果(结果)
返回Ok(新的{Result=true,Message=_localize[“Login Success”]});
返回Ok(新的{Result=false,Message=_localize[“Login failed”]});
}

有没有更好的基于应用程序语言返回多语言消息的解决方案?我不想将此邮件保存到数据库中。

必须为每个请求设置区域性。您的登录代码不会将设置保存在任何位置,因此下一个网页请求的设置将丢失

ASP.NET Core有一个本地化框架,其中包括用于更改请求区域性的中间件

在您的情况下,您可以使用
CookieRequestCultureProvider
在用户登录具有其首选区域性和UI区域性的区域时设置cookie

e、 g

this.Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, “c=fa-IR | uic=fa-IR”); 确保对cookie名称使用
CookieRequestCultureProvider.DefaultCookieName
,因为这是中间件将查找的名称


如果需要,还有其他方法可以设置请求区域性,如
QueryStringRequestCultureProvider
CustomProvider

谢谢,但我需要类似的方法在每个请求中设置区域性。或者在我的项目中而不是在数据库中创建消息表(json或xml文件)? this.Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, "c=fa-IR|uic=fa-IR");