ASP.NET MVC正则表达式路由约束

Fab*_*ers 8 regex routes constraints asp.net-mvc-2

我正在尝试在路线上设置特定约束时遇到问题.我的URL必须如下所示:http:// hostname/id-my-title-can-be-that-long其中id仅由数字组成,标题为带有破折号分隔符的小写字符.id和标题也用短划线分隔.例如:http:// hostname/123-my-title.

这是我的路线定义:

routes.MapRoute(
    "Test",
    "{id}-{title}",
    new { controller = "Article", action = "Index" },
    new { id = @"(\d)+", title = @"([a-z]+-?)+" }
);
Run Code Online (Sandbox Code Playgroud)

使用html帮助程序正确生成URL:

<%: Html.ActionLink("My link", "Index", "Article", new { id = Model.IdArticle, title = Model.UrlTitle }, null) %>
Run Code Online (Sandbox Code Playgroud)

当然,Model.IdArticle是一个Int32,而Model.UrlTitle是我的标题的预先形成的字符串,符合我的要求(仅小写,空格由短划线代替).

问题是,当我按照链接时,没有调用正确的控制器和方法,它会落到下一个错误的路径.

对于记录,我在ASP.NET MVC 2上.

有人有想法吗?

在此先感谢Fabian

Wes*_*olf 0

您可以尝试传递整个路由字符串“{id}-{title}”,并在字符串进入您的操作之前手动解析该字符串,方法是执行类似于 Phil Haack 的 slug to id actionfilter 属性 -链接

希望这可以帮助。