我正在尝试使用路由实现本地化
我有以下内容:
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/空)。
要解决这个问题,我相信您可以在 MapRoute 上指定一个正则表达式(匹配,例如,恰好有 2 个字符的语言)——它在某些时候发生了变化,但是……(抱歉,目前没有 IDE,所以我无法准确检查)。
根据内存,它可能是:
routes.MapRoute( "DefaultLocalized",
"{lang}/{controller}/{action}/{id}",
new { controller = "Home",
action = "Index",
id = "",},
new { lang = "[a-z]{2}" }
);
请注意,您可能不希望每个 Action 都采用“字符串语言”,因此您应该在基本 Controller 或 Action 过滤器(在任一情况下,可能会将信息添加到 ViewData)。
关于c# - asp.net mvc本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/660872/