1

我有我自己的默认路线,像这样

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

但是当我的网站启动时它正在搜索 /Home 路线并且它不存在,我需要在它启动时传递那个国家和语言参数但我不知道在哪里?并使用 ES/es/Home 之类的东西获取我的默认路由。

提前致谢。

4

1 回答 1

1

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

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

它将使用默认值填充国家和语言选项。

或者,如果您的要求是将应用程序的起始 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.PathandRequest.ApplicationPath都将具有/启动 url 的价值。在这里,此检查仅在起始/默认 url 中完成,因此我认为此代码不会导致网站明显变慢。您可能会注释掉代码,并检查性能是否提高,以确保此代码是否是导致性能的原因。

于 2013-04-16T17:07:02.267 回答