MVC 路由:约束路由以匹配识别的控制器名称



我想定义一个带有约束的路由,以便它只匹配已知的控制器名称。这是为了允许我为相同形式的其他 URL 定义回退路由。

具体说来:

/User

应该带我到用户控制器(存在)的索引操作

/History

应该带我到历史记录控制器(存在)的索引操作

/es
由于不存在"es"

控制器,因此应使用回退路由并将我带到语言参数值为"es"的 Home 控制器的索引操作。

我需要这个,因为我需要提供一个带有语言代码的特殊 URL,以给定语言启动应用程序。因此,现在需要区分路由中的有效控制器名称和语言名称。

如何实施RegisterRoutes来实现此目的?非常感谢!

编辑:我意识到我可以为每个控制器定义一个特定的路由,这没关系(我没有无数个控制器)。但我想知道我是否可以依靠通用约束来实现这一点,这样我就不必定义单个路由。

定义路由时,请使用"约束"参数来处理此问题。

例如:

RouteTable.Routes.Add(new Route
{
    Url = "{controller}/{action}",
    Constraints = new { controller = "User|History" },
    Defaults = new { action = "Index" }
};
RouteTable.Routes.Add(new Route
{
    Url = "{languageCode}",
    Defaults = new { controller = "Home", action = "Index" }
};

将首先评估添加的第一个路由。如果"controller"的令牌与约束不匹配,则将评估添加的下一个路由,并使用索引操作和参数 languageCode 中的语言标记解析到主控制器。您可能还希望向 languageCode 令牌添加约束,以确保仅匹配有效的语言。然后,您可以添加第三条路由作为包罗万象的路由。

你也可以使用路由处理程序来处理语言代码,正如我在博客文章本地化和MVC中所描述的那样。

最新更新