我正在尝试为现有的MVC 3应用程序添加对不同语言的支持.到目前为止,我的链接是
oldUrl -> myapp.com/Item/Details/5/some-title
网站上有不同地方的网站链接.但是现在我想更改URL以便包含语言:
newUrl -> kmyapp.com/en/Item/Details/5/some-title
但是我希望oldUrl链接有效.问题是如何做到这一点…最简单的方法是添加另一条路线,但我已经有太多它们而且它变得有点丑陋,当我从一个不创建的网页创建网址时有语言链接也没有语言所以我必须做其他事情.
另一种方法是覆盖在MVC尝试将请求映射到特定路由之前的某些东西,但是已经解析了请求URL并填充了routeValues字典.所以我可以检查语言,如果它没有包含在路由参数中,我可以自己添加它并调用父类的实现继续.那可能吗?我应该注意什么 – UrlRoutingModule,MvcHttpHandler或其他什么?我可以覆盖什么以及如何告诉MVC使用我的版本?
任何其他想法也将不胜感激!
解决方法
另一种方法是覆盖在MVC尝试将请求映射到特定路由之前的某些东西,我可以自己添加它并调用父类的实现继续.那可能吗?
Yes It is possible.
您可以覆盖其中包含URL详细信息的GetRouteData in RouteBase.
public override RouteData GetRouteData(HttpContextBase httpContext) { string url = httpContext.Request.AppRelativeCurrentExecutionFilePath; }
and in global.aspx add below code.
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.Add(new MyUrlRoute()); // Add before your default Routes routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Home",action = "Index",id = UrlParameter.Optional } // Parameter defaults );
For more detailed implementation – refer 07001