我很茫然......这是我的路线:
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();
答案 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”,如果这实际上是您的操作名称。)