1.NET 7.0 MVC CORE
2.用中间件对语言查询字符串进行拦截,前后端都可以切换语言,查询地址如下:
http://localhost:5230/Home/GetProduct/?culture=zh-CN
app.Use(async (context, next) =>
{
if (context.Request.Query.Count > 0 && context.Request.Query["culture"].ToString() != "")
{
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture = new CultureInfo(context.Request.Query["culture"].ToString());
//save current culture to cookide
context.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue
(new RequestCulture(context.Request.Query["culture"].ToString()))
, new CookieOptions() { Expires = DateTime.Now.AddYears(1) }
);
}
await next.Invoke();
});
问题:每个页面都加个语言查询不好,于是用如下方式写入cookine中,再用中间件拦截cookie中的值,设置cultrue。
这种改的方式正确吗?
[HttpGet]
public ActionResult SetCulture(string lang)
{ //用于语言切换
var culture="zh-CN";
switch (lang.Trim())
{
case "en":
culture="en-US";
break;
case "cn":
culture="zh-CN";
break;
};
Response.Cookies.Append("culture", culture, new CookieOptions
{
Expires = DateTime.Now.AddYears(1)
});
return Json(new { success = true });
app.Use(async (context, next) =>
{
var cookies = context.Request.Cookies;
var myCookieValue = cookies["culture"];
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture = new CultureInfo(myCookieValue);
if (context.Request.Query.Count > 0 && context.Request.Query["culture"].ToString() != "")
{
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture = new CultureInfo(context.Request.Query["culture"].ToString());
//save current culture to cookide
context.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue
(new RequestCulture(context.Request.Query["culture"].ToString()))
, new CookieOptions() { Expires = DateTime.Now.AddYears(1) }
);
}
await next.Invoke();
});