我尝试使用http://weblogs.asp.net/paulomorgado/archive/2010/01/31/web-site-globalization-with-asp-net-routing.aspx中解释的解决方案,使用路由中的语言参数来本地化我的应用程序。
以下是我在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" }
);
}
但是当我将浏览器指向/ en / admin或/ fa / admin时,我收到404错误消息。
我也试过这个:
routes.MapRoute(
"AdminHome",
"admin",
new { controller = "Admin", action = "Index" }
);
但是/ en / admin仍然是404错误 - (在这种情况下“/ admin”有效。)
有什么想法吗?
答案 0 :(得分:0)
我在自己的MVC网站上有一个非常相似的路由模式。
routes.MapRoute(
"BlogSpecific", // Route name
"{blogSubFolder}/{controller}/{action}", // URL with parameters
new { blogSubFolder = "", controller = "", action = "Index" } // Parameter defaults
);
我可以看到的两个主要区别是我在路线中指定了{action},我还将第一个路线参数称为我对象中的参数(“blogSubFolder =”“,”)。
现在我做了一些测试,我发现了你所看到的相同行为,我从我的路线中取出{action}并获得了404.但是如果我指定了动作,一切都会成功。
好的,所以我使用默认路由创建了一个新项目,而且我不必指定操作,它默认为Index就像我期望的那样。然后我添加了一个新的路由,我在其中指定了控制器{language} / Foo / {action},如果我没有在我的url中包含索引,我会继续收到错误。长话短说,尽管我可以判断你的路线是否有一个在控制器之前的变量,你必须在你的网址中指定动作。