MVC C#自定义MvcRouteHandler-如何?
有没有人有提供自定义MvcRouteHandler的经验?在我的应用程序中,我想实现一个全球化模式,例如http:// mydomain / en / about或者http:// mydomain / de / about。
至于持久性,我想在请求到达后立即读取cookie,并且如果此cookie中有语言设置,请套用它(这样,到达http:// mydomain /的用户将被转移到http:/ / mydomain / en /)。如果没有cookie,我想获取浏览器支持的第一种语言,应用该语言并将其存储在此cookie中。
我想这不能通过mvc在初始项目模板中提供的标准路由机制来完成。在新闻组中,我获得了技巧,以了解MvcRouteHandler并实现自己的方法。但是很难找到如何做到这一点的样本。
有任何想法吗?
解决方案
回答
我们应该能够使用ASP.NET MVC的默认模板执行此操作,我正在执行类似的操作。只需将路线构建为{language} / {controller} / {action} / {id}
只需设置一条默认路由,该默认路由会进入控制器,该控制器检查语言cookie,并根据该cookie重定向用户。
回答
我认为我们所做的工作不需要自定义路由处理程序。
对于"全球化" URI,将执行常规的MVC路由,并具有" locale"参数必须等于" en"," de"等的约束。该约束将防止非全局URI与路由匹配。
对于"非全局化" URI,进行"全部捕获"路由,该路由仅重定向到默认或者cookie设置的区域设置URI。
将" globalized"路由放置在Global.asax中的" catch-all"路由之上,以使" already-globalized" URI不会陷入重定向。
如果希望某个URI模式触发不是控制器上的动作的东西,则需要制作一个新的路由处理程序。但我认为这不是我们要处理的内容。