【问题标题】:MVC C# custom MvcRouteHandler - How to?MVC C# 自定义 MvcRouteHandler - 如何?
【发布时间】:2010-09-10 06:31:45
【问题描述】:

有没有人有提供自定义 MvcRouteHandler 的经验?在我的应用程序中,我想实现像 http://mydomain/en/abouthttp://mydomain/de/about 这样的全球化模式。

至于持久性,我希望在请求到达时立即读取 cookie,如果此 cookie 中有语言设置,则应用它(因此用户到达 http://mydomain/ 将被转移到 http://mydomain/en/ 例如)。如果没有 cookie,我想获取浏览器支持的第一种语言,应用这个并将其存储在这个 cookie 中。

我猜这不能用 mvc 在它的初始项目模板中提供的标准路由机制来完成。在一个新闻组中,我得到了查看 MvcRouteHandler 并实现我自己的提示。但是很难找到如何做到这一点的示例。

有什么想法吗?

【问题讨论】:

    标签: c# asp.net-mvc mvcroutehandler


    【解决方案1】:

    我认为您正在做的事情不需要自定义路由处理程序。

    对于您的“全球化”URI,一个常规的 MVC 路由,具有“locale”参数必须等于“en”、“de”等的约束,就可以了。该约束将阻止非全球化 URI 匹配路由。

    对于“非全球化”URI,创建一个“包罗万象”的路由,它只是重定向到默认或 cookie 设置的区域设置 URI。

    将“全球化”路由放在 Global.asax 中的“catch-all”路由上方,这样“已经全球化”的 URI 就不会被重定向。

    如果您希望某个 URI 模式触发某些不是控制器上的操作的东西,则需要创建一个新的路由处理程序。但我认为这不是你要处理的问题,在这里。

    【讨论】:

      【解决方案2】:

      你应该可以使用 ASP.NET MVC 的默认模板来做到这一点,我正在做类似的事情。只需将您的路线构建为 {language}/{controller}/{action}/{id}

      只需设置一个默认路由,该路由将转到检查语言 cookie 并根据该 cookie 重定向用户的控制器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-24
        • 2023-02-02
        • 1970-01-01
        • 1970-01-01
        • 2018-10-24
        • 1970-01-01
        相关资源
        最近更新 更多