1

私は多言語サイトを持っており、各言語は独自のcultureinfoを使用しています。ActionFilterAttributeを使用してculterinfoを設定しようとしましたが、modelbindingの後に起動されます。グローバルasaxBeginRequestも試しましたが、RouteDataはまだ利用できません。

では、CurrentUICultureをmodelbinderに設定すると、必要なcultureinfoも使用されるのでしょうか。

マックス

4

1 に答える 1

2

このすばらしい記事から、オーバーライドできる/必要なものを見つけることができます:ASP.NETMVC拡張性の概要

カスタム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();
于 2012-10-25T11:21:59.370 に答える