C# 默认modelbinder使用了错误的cultureinfo

C# 默认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

我有多语言网站,每种语言都使用自己的文化信息。 我尝试使用ActionFilterAttribute设置culterinfo,但它在modelbinding后被激发。 我还尝试了global asax BeginRequest,但RouteData尚未提供

那么,应该在哪里将CurrentUICulture设置为modelbinder,并根据需要使用cultureinfo


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扩展方法的源代码,那么它是开源的。