2011-12-12 49 views
2

我有一個多語言站點。當網站沒有所需的語言時,我正在嘗試更改爲英文(包括網址)。我想通過重定向到相同的頁面來改變網址的語言。所以我添加了一個關鍵字「_Language」的資源,如果它是活動的,它將獲得語言代碼。例如,如果資源文件不存在,或者它沒有準備好,它將回退到某種其他語言。在Global.asax我有這樣的代碼:在MVC上的Application_BeginRequest中重定向

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "DefaultLang", // Route name 
     "{language}/{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults 
     new { language = "^[a-z]{2}$" } // Get language 
    ); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Cuenta", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 
} 

public static string Language 
{ 
    get 
    { 
     var currentContext = new HttpContextWrapper(HttpContext.Current); 
     var routeData = RouteTable.Routes.GetRouteData(currentContext); 
     if (routeData != null) 
     { 
      var lang = (string)routeData.Values["language"]; 
      if (lang != null && lang.Length == 2) 
       return lang.ToLower(); 
     } 
     return "es"; 
    } 
} 

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(MvcApplication.Language); 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(MvcApplication.Language); 

    if (Texts._Language != MvcApplication.Language) // Detect fallback. 
    { 
     Response.Redirect(Request.Url.AbsoluteUri.Replace("/" + MvcApplication.Language + "/", "/en/")); 
     Response.End(); 
     return; 
    } 
} 

我的問題是,每次某種原因,用戶被重定向的BeginRequest響應它的一個404,我比較了一個當網址語言設置(從頭開始)英文,他們是一樣的!這是爲什麼發生?

回答

2

多麼愚蠢!我實際上是用POST請求=(