C# 如何更改ASP.net Core 3.1中的CurrentCulture
多语言应用程序调用我的API,我想返回消息,基于应用程序语言而不是基于应用程序文化。因此,我决定使用本地化,但当前文化不会随此代码而改变。 大概是这样的: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 =
[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");