ASP.NET MVC - 奇怪的路由问题,非常简单的路由不匹配问题

时间:2009-07-25 09:28:17

标签: asp.net-mvc routes

我很茫然......这是我的路线:

routes.MapRoute("LangOnly", "{language}",
    new { controller = "Home", action = "Root", language = "en" },
    new { language = @"en|ja" });

匹配 www.domain.com/en ,但 匹配 www.domain.com/ja

是吗?我甚至忘了评论任何其他路线......有点卡住了。 ; /

更新:这是Home控制器上的root操作。

[CompressFilter]
public ActionResult Root()
{
    if (!IsEnglish)
        return RedirectToAction("Index", "Biz", new { b = "" });

    return Request.IsAuthenticated ? View("LoggedInRoot") : View("Root");
}

它不需要语言参数,因为它是在OnActionExecuting的基础控制器上设置的,如下所示:

    var l = (RouteData.Values["language"] != null) ? RouteData.Values["language"].ToString() : string.Empty;

    if (string.IsNullOrEmpty(l))
        l = "en";

    if (l.Contains("en"))
    {
        IsEnglish = true;
        l = "en";
    }
    else
    {
        IsEnglish = false;
        l = "ja";
    }

    ViewData["lang"] = l.ToLower();
    Language = l.ToLower();

1 个答案:

答案 0 :(得分:1)

完美适合我的路线。试试这个简单的配置:

routes.MapRoute("LangOnly", "{language}",
                new {controller = "Home", action = "Index", language = "en"},
                new {language = @"en|ja"});


routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

你的行动:

public ActionResult Index(string language)
{
.....

(我在这里使用“索引”作为操作,显然将其更改为“Root”,如果这实际上是您的操作名称。)