我有多语言网站,每种语言都使用自己的cultureinfo。 我尝试使用ActionFilterAttribute设置culterinfo,但是在modelbinding之后触发了它。 我也尝试了全局asax BeginRequest,但还没有RouteData。
那么将CurrentUICulture设置为modelbinder的位置还应该使用cultureinfo吗?
最高
答案 0 :(得分:2)
您可以在这篇精彩的文章中找到您可以/需要覆盖的内容:An Introduction to ASP.NET MVC Extensibility
您可以编写自定义MvcRouteHandler:
public class LangRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
if (requestContext.RouteData.Values.ContainsKey("lang"))
{
var culture = new CultureInfo(requestContext.RouteData.Values["lang"].ToString());
if (culture != null)
{
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
}
}
return base.GetHttpHandler(requestContext);
}
}
并在您的路线中使用此路线处理程序,如下所示:
routes.MapRoute(
name: "Default",
url: "{controller}/{lang}/{action}/{id}",
defaults: new { controller = "Home", lang = "en", action = "Index", id = UrlParameter.Optional }
).RouteHandler = new LangRouteHandler();