C# 默认modelbinder使用了错误的cultureinfo
我有多语言网站,每种语言都使用自己的文化信息。 我尝试使用ActionFilterAttribute设置culterinfo,但它在modelbinding后被激发。 我还尝试了global asax BeginRequest,但RouteData尚未提供 那么,应该在哪里将CurrentUICulture设置为modelbinder,并根据需要使用cultureinfoC# 默认modelbinder使用了错误的cultureinfo,c#,asp.net-mvc,model-binding,cultureinfo,C#,Asp.net Mvc,Model Binding,Cultureinfo,我有多语言网站,每种语言都使用自己的文化信息。 我尝试使用ActionFilterAttribute设置culterinfo,但它在modelbinding后被激发。 我还尝试了global asax BeginRequest,但RouteData尚未提供 那么,应该在哪里将CurrentUICulture设置为modelbinder,并根据需要使用cultureinfo Max您可以从这篇伟大的文章中找到您可以/需要覆盖的内容: 您可以编写一个自定义MvcRouteHandler: publi
Max您可以从这篇伟大的文章中找到您可以/需要覆盖的内容: 您可以编写一个自定义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);
}
}
在您的路线中使用此routehandler,如下所示:
routes.MapRoute(
name: "Default",
url: "{controller}/{lang}/{action}/{id}",
defaults: new { controller = "Home", lang = "en", action = "Index", id = UrlParameter.Optional }
).RouteHandler = new LangRouteHandler();
但有一个问题。。。是否可以将我的自定义路由处理程序设置为默认路由处理程序?我不这么认为。但是,如果您想确保查看MVC项目中MapRoute扩展方法的源代码,那么它是开源的。