比方说,我有一个网址是这样的:如何在asp.net MVC中缺少路由“部件”时重定向?
www.site.com/en/home/list/2010-09-30
的“en”是英语,我想,以确保始终有URL中的语言标记集。如果用户输入www.site.com/home/list/2010-09-30
我希望它重定向到www.site.com/en/home/list/2010-09-30
(其中en是默认语言)。
这是如何在asp.net MVC(版本,如果重要的话)最好的完成?
比方说,我有一个网址是这样的:如何在asp.net MVC中缺少路由“部件”时重定向?
www.site.com/en/home/list/2010-09-30
的“en”是英语,我想,以确保始终有URL中的语言标记集。如果用户输入www.site.com/home/list/2010-09-30
我希望它重定向到www.site.com/en/home/list/2010-09-30
(其中en是默认语言)。
这是如何在asp.net MVC(版本,如果重要的话)最好的完成?
这可能是最好的自定义HttpModule中处理。我相信你已经知道了,但为了以防万一,你也可以在路由声明中默认路由值“en”。它不会重定向页面,但文化将始终在代码中设置,如果它不存在于URL中。
context.MapRoute(
"Default",
"{culture}/{controller}/{action}/{id}",
new { culture = "en", action = "Index" });
一个简单的解决办法是有一个通配符路径(这应该是你的Global.asax文件的底部):
routes.MapRoute(
"WildCard",
"{*url}",
new { controller = "Main", action = "EnglishDefault" }
);
那么你的行动将是:
public ActionResult EnglishDefault (string url)
{
return Redirect("/en/" + url);
}
你有没有在自定义HttpModule中如何处理这个例子的例子?我将按照此处所述创建HttpModule:http://wiki.asp.net/page.aspx/909/custom-http-module/但由于我以前从未构建过,因此不太确定如何检查语言,它是否有权访问该路线? – Chaddeus 2010-12-19 22:39:11