我正在尝试通过路线实现本地化
我有以下内容:
routes.MapRoute( "DefaultLocalized",
"{lang}/{controller}/{action}/{id}",
new { controller = "Home",
action = "Index",
id = "",
lang = "en" }
);
routes.MapRoute( "Default",
"{controller}/{action}/{id}",
new { controller = "Home",
action = "Index",
id = "" }
);
当我调用我的页面时domain/en/home/index
,它工作正常,但是当我打电话时domain/home/index
我收到错误 404:找不到资源。
还有当我在domain/en/home/index
然后我单击一个被重定向到的安全页面domain/Account/login
我怎样才能被重定向到domain/en/Account/login
?
另外,当我收到应用程序错误时,如何重定向到domain/en/home/error
?
真正的问题是如何以语言作为路由参数来实现本地化?
默认情况下,路由将从左到右匹配,因此“domain/home/index”将首先匹配 lang=domain、controller=index、action(默认为 index)、id(默认为 0/null)。
为了解决这个问题,我相信你可以在 MapRoute 上指定一个正则表达式(例如,匹配恰好有 2 个字符的语言) - 但它在某些时候已经改变了......(抱歉,目前没有 IDE,所以我可以具体就不查了)。
据记忆,它might be:
routes.MapRoute( "DefaultLocalized",
"{lang}/{controller}/{action}/{id}",
new { controller = "Home",
action = "Index",
id = "",},
new { lang = "[a-z]{2}" }
);
请注意,您可能不希望每个操作都采用“string lang”,因此您应该在基本控制器或操作过滤器中处理路由的“lang”部分(在任何一种情况下,大概将信息添加到 ViewData)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)