如何在asp.net MVC中路由缺少“部件”时重定向?

时间:2010-12-15 13:28:19

标签: c# asp.net-mvc routing

假设我有一个这样的网址:

www.site.com/en/home/list/2010-09-30

“en”用于英语,我想确保在网址中始终设置语言标记。如果用户输入www.site.com/home/list/2010-09-30我希望它将其重定向到www.site.com/en/home/list/2010-09-30(其中en是默认语言)。

如何在asp.net MVC中最好地完成(如果重要的话,版本是什么版本)?

2 个答案:

答案 0 :(得分:2)

这可能最好在自定义HttpModule中处理。我相信您已经知道了,但为了以防万一,您也可以在路线声明中默认路线值“en”。它不会重定向页面,但如果URL中没有文化,那么文化将始终在代码中设置。

context.MapRoute(
    "Default",
    "{culture}/{controller}/{action}/{id}",
    new { culture = "en", action = "Index" });

答案 1 :(得分:0)

一个简单的解决方案是使用通配符路由(这应该位于global.asax文件的底部):

routes.MapRoute(
                "WildCard",
                "{*url}",
                new { controller = "Main", action = "EnglishDefault" }
            );

然后你的行动将是:

public ActionResult EnglishDefault (string url)
{
   return Redirect("/en/" + url);
}