Mvc:自定义默认路由

时间:2013-04-16 16:25:52

标签: asp.net-mvc asp.net-mvc-4 routes

我有自己的默认路线

routes.MapRoute(
            name: "Default",
            url: "{country}/{lang}/{controller}/{action}",
            defaults: new { controller = "Home", action = "Index" }
        );

但是当我的网站开始搜索/ Home路由并且它不存在时,我需要在启动时传递该国家和lang参数但我不知道在哪里?并使用ES / es / Home等方式获取我的默认路由。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您要查找country和lang的默认值,只需更改默认选项

即可
defaults: new { country="ES", lang="es", controller = "Home", action = "Index" }

它将使用默认值填充country和lang选项。

或者,如果您的要求是将应用程序设置为启动URL,

www.site.com/ES/es

将以下代码放在Application_BeginRequest

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if (String.Compare(Request.Path, Request.ApplicationPath, StringComparison.InvariantCultureIgnoreCase) == 0)
            Response.Redirect(Request.Path + "ES/en");
}

修改

Application_BeginRequest中的代码将针对每个请求执行,包括资源(js / css)url。您可以删除Application_BeginRequest代码并将代码放在默认控制器的默认操作中的顶部以产生相同的效果。像:

//Home Controller
public ActionResult Index(string country, string lang)
{
    if (String.Compare(Request.Path, Request.ApplicationPath, StringComparison.InvariantCultureIgnoreCase) == 0)
        return Redirect(Request.Path + string.Format("{0}/{1}", country, lang));
    return View();
}

修改

代码,

if (String.Compare(Request.Path, Request.ApplicationPath, StringComparison.InvariantCultureIgnoreCase) == 0)
        return Redirect(Request.Path + string.Format("{0}/{1}", country, lang));

检查传入的URL是否是应用程序的根URL,如果是,则使用其他路径信息重定向。理想情况下,Request.PathRequest.ApplicationPath两者都有值/来启动网址。这里的检查只在start / default url中完成,所以我认为这段代码不会导致网站显着减慢。您可以注释掉代码,并检查性能是否增加,以确保此代码是否是性能的原因。