MVC C#自定义MvcRouteHandler - 如何?

时间:2008-09-17 17:11:28

标签: c# asp.net-mvc mvcroutehandler

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

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

我想mvc在其初始项目模板中提供的标准路由机制无法做到这一点。在新闻组中,我得到了一个提示,看看MvcRouteHandler并实现我自己的。但很难找到如何做到这一点的样本。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我不相信你正在做的事情需要自定义路由处理程序。

对于“全球化”URI,常规MVC路由具有“locale”参数必须等于“en”,“de”等的约束。约束将阻止非全球化URI匹配路由。

对于“非全局化”URI,创建一个“全能”路由,只需重定向到默认或cookie设置的语言环境URI。

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

如果您希望某个URI模式触发某个不是控制器上的操作的内容,则需要创建一个新的路由处理程序。但我不认为这就是你在处理的事情。

答案 1 :(得分:0)

您应该能够使用ASP.NET MVC的默认模板执行此操作,我正在做类似的事情。只需将您的路线构建为{语言} / {controller} / {action} / {id}

即可

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