2010-02-08 82 views
0

我試圖使用在http://weblogs.asp.net/paulomorgado/archive/2010/01/31/web-site-globalization-with-asp-net-routing.aspx解釋的解決方案來使用我的路由中的language參數來本地化我的應用程序。ASP.NET MVC路由全球化問題

下面是我在我的Global.asax代碼:

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

     routes.Add("en", new Route("en/{*path}", new GlobalizationRouteHandler(CultureInfo.GetCultureInfo("en-US")))); 
     routes.Add("fa", new Route("fa/{*path}", new GlobalizationRouteHandler(CultureInfo.GetCultureInfo("fa-IR")))); 

     routes.MapRoute(
      "AdminHome", 
      "{language}/admin", 
      new { controller = "Admin", action = "Index" } 
     ); 

    } 

但是,當我指出我的瀏覽器/ E​​N/admin或/ FA /管理我收到一個404錯誤消息。

我想這一個了:

routes.MapRoute(
     "AdminHome", 
     "admin", 
     new { controller = "Admin", action = "Index" } 
    ); 

但仍然是一個404錯誤/ EN /管理員 - (在這種情況下, 「/ admin」 的作品。)

任何想法?

+0

我收到了一些編寫原始代碼的人的指南,他建議我在GlobalizationRouteHandler之前編寫我的路由規則。我沒有嘗試,因爲我使用了另一種方法。你可以測試它並告訴我們結果;) – 2010-02-19 14:19:35

回答

0

我在我自己的MVC站點有一個非常相似的路由模式。

  routes.MapRoute(
      "BlogSpecific",            // Route name 
      "{blogSubFolder}/{controller}/{action}",       // URL with parameters 
      new { blogSubFolder = "", controller = "", action = "Index" } // Parameter defaults 
     ); 

,我可以看到是我指定在我的行程的{動作},我也叫出第一路由PARAM作爲參數在我的對象的兩個主要的差異(「blogSubFolder =‘’,」 )。

現在我只做了一些測試,並且發現了與您所看到的相同的行爲,我將{action}從我的路線中取出,並獲得一個404.但是,如果我指定了一切行爲,

好的,所以我創建了一個新的項目,使用默認路由,我不必指定動作,它默認爲Index,就像我期望的那樣。然後,我添加一個新的路由,在其中指定控制器{language}/Foo/{action},並且如果我不在URL中包含索引,則繼續出現錯誤。長話短說,就像我可以告訴你的路由是否有一個變量在控制器之前一樣,你必須在你的url中指定動作。