1

好吧,所以我一直坚持了至少2天,用Google搜索和检查出所有我能找到的其他堆栈文章。MVC自定义路由和本地化

我只想检查我的路线中的第一个参数是否为有效的文化名称,如果它没有在执行前修改url/route以包含文化值。

难道是这样吗?!我认为不应该。

我只能修改basecontroller类中的所有其他控制器继承的东西,并在那里检查并修改所有路由数据并将其发送。问题在于我有一些其他的自定义路线。

好的,所以这里是我的代码的问题,以及为什么我认为在执行任何控制器之前最容易做到这一点。

routes.MapRoute(
      "Localization", 
      "{lang}/{controller}/{action}", 
      new { lang="en-US",controller="Home",action="Index"} 
      ); 
     routes.MapRoute(
      "Solutions", 
      "{lang}/Solutions/{controller}/{action}", 
      new { lang="en-US", controller = "WhatWeDo", action = "Index"} 
     ); 
     routes.MapRoute(
      "Default", // Route name 
      "{lang}/{controller}/{action}/{id}", // URL with parameters 
      new { lang = "en-US", controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

所以,如果我尝试修改的东西,我碰到这个讨厌/解决方案/定制某些解决方案的路线,并为其他答案它需要一个定制的重定向(得到永久迁移的错误),并检查看看某些参数是否为空。

有没有什么办法提取路由数据并修改global.asax文件中的路由/ url?这将是最简单的,我真的想把它放进去,以便它始终在那里,而且我可以正常路由。

我可能没有做出太多的感觉,但我有点沮丧。有什么建议么?

+0

因此,我决定只保留我的所有路线的lang参数,并且只是咬紧牙关,修改每一个简单链接和动作链接,将其包含在routedata中。不过,我想知道是否有人为此提供解决方案,所以我会放几天。 – Ryan 2012-01-10 19:50:45

+0

我不太确定问题所在。解释你想要这个代码做什么以及它实际上在做什么。 – MrBoJangles 2012-01-17 22:34:53

回答

1

我不完全确定你想要达到的目标,是在路线中“执行”语言吗?

你可以尝试编写自己的RouteHandler来处理事情吗?

我写了关于我的blog类似的东西。

+0

是的,这是我想要做的。我会给你信贷的答案,因为这似乎是我想做的。在路线中强化语言将是最好的解决方案,它可能需要你的建议。谢谢。我可能会稍后再实施。 – Ryan 2012-01-20 21:34:54