2010-12-15 83 views
0

比方说,我有一个网址是这样的:如何在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(版本,如果重要的话)最好的完成?

回答

2

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

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

你有没有在自定义HttpModule中如何处理这个例子的例子?我将按照此处所述创建HttpModule:http://wiki.asp.net/page.aspx/909/custom-http-module/但由于我以前从未构建过,因此不太确定如何检查语言,它是否有权访问该路线? – Chaddeus 2010-12-19 22:39:11

0

一个简单的解决办法是有一个通配符路径(这应该是你的Global.asax文件的底部):

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

那么你的行动将是:

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

通配符路由会捕获我描述的url的区别吗?似乎它不会达到通配符路线...我会玩一些路线。感谢这个想法。 – Chaddeus 2010-12-19 22:38:26

+0

@Chad - 我会确保我有在这个通配符路径上定义的路由来处理格式正确的URL。这条路线将放在路由表的底部,并用作捕获,然后重新映射到正确的格式。 – amurra 2010-12-21 13:23:10