繁体   English   中英

Mvc:自定义默认路由

[英]Mvc: Custom default route

我有这样的默认路线

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

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

提前致谢。

如果您要查找国家和语言的默认值,只需更改默认选项,

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

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

或者,如果您的要求是将应用程序的起始网址设置为

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)网址。 您可以删除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具有值/用于起始URL。 在这里,此检查仅在起始/默认网址中完成,因此我认为此代码不会导致网站明显变慢。 您可能会注释掉该代码,并检查性能是否提高,以确保该代码是否是造成性能的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM