Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “当路线丢失时如何重定向”;“零件”;在asp.NETMVC中?_C#_Asp.net Mvc_Routing - Fatal编程技术网

C# “当路线丢失时如何重定向”;“零件”;在asp.NETMVC中?

C# “当路线丢失时如何重定向”;“零件”;在asp.NETMVC中?,c#,asp.net-mvc,routing,C#,Asp.net Mvc,Routing,假设我有这样一个url: 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中处理。我相信您已经知道了,但为了以

假设我有这样一个url:

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文件的底部):

那么你的行动将是:

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

通配符路由会捕捉到我描述的url之间的差异吗?似乎它无法到达通配符路径。。。我会玩一下路线。谢谢你的想法。@Chad-我会确保在这个通配符路由上面定义了路由,以处理正确格式的URL。此路由将位于路由表的底部,并用作一个总括,然后再重新连接到正确的格式。您有一个在自定义HttpModule中如何处理此路由的示例吗?我将按照这里描述的方式创建HttpModule:但由于我以前从未构建过HttpModule,因此不太确定如何检查语言,它是否可以访问路由?
public ActionResult EnglishDefault (string url)
{
   return Redirect("/en/" + url);
}