【问题标题】:MVC Custom Routing and LocalizationMVC 自定义路由和本地化
【发布时间】:2012-01-10 01:51:17
【问题描述】:

好的,伙计们,我已经被困了至少 2 天,我在谷歌上搜索并查看了我能找到的所有其他堆栈文章。

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

有这么难吗?!我觉得不应该。

我可以只修改 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
        );

所以,如果我尝试修改某些东西,我会遇到这个讨厌的 /solutions/ 自定义路由来获取某些解决方案,而对于其他答案,它需要自定义重定向(产生一个永久移动的错误),并检查某些参数是否为空。

有什么方法可以提取路由数据并在 global.asax 文件中修改我的路由/url?那里是最简单的,我真的很想把它放进去,这样它就一直在那里,而且我可以正常路由。

我可能不太明白,但我有点沮丧。有什么建议吗?

【问题讨论】:

  • 所以,我决定只为我的所有路由保留一个 lang 参数,然后硬着头皮修改每个 routlink 和 actionlink 以将其包含在路由数据中。但是,我想知道是否有人对此有解决方案,所以我会搁置几天。
  • 我不太确定问题出在哪里。解释您希望这段代码做什么以及它实际在做什么。

标签: model-view-controller localization asp.net-mvc-routing global-asax


【解决方案1】:

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

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

我在blog 上写过类似的东西。

【讨论】:

  • 是的,这就是我想要做的。我会给你答案,因为这似乎是我想做的事情。在路由中强制执行语言将是这里最好的解决方案,它可能需要您的建议。谢谢。稍后我可能会实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 2020-02-23
相关资源
最近更新 更多