我有一个没有约束的自定义路由,可以使用ActionLink生成Restful URL。
路线 -
routes.MapRoute(
"Blog", // Route name
"Blog/{d}/{m}/{y}", // URL with parameters,
new { controller = "Blog", action = "Retrieve" }
生成 -
http://localhost:2875/Blog/12/1/2010
从 -
<%=Html.ActionLink("Blog Entry - 12/01/2010", "Retrieve", "Blog", new { d = 12, m = 01, y = 2010 }, null)%>
如果我添加这样的约束。
routes.MapRoute(
"Blog", // Route name
"Blog/{d}/{m}/{y}", // URL with parameters,
new { controller = "Blog", action = "Retrieve" },
new { d = @"\d{2}", m = @"\d{2}", y = @"\d{4}" }
它生成 -
http://localhost:2875/Blog/Retrieve?d=12&m=1&y=2010
额外信息:在自定义路线之前添加。
有什么想法吗? 干杯
答案 0 :(得分:4)
我在撰写博客时正在处理同样的问题。最后我意识到我的网址必须使用1位数的月份数字..将您的路线定义更改为此,它会起作用:
routes.MapRoute(
"Blog", // Route name
"Blog/{d}/{m}/{y}", // URL with parameters,
new { controller = "Blog", action = "Retrieve" },
new { d = @"\d{1,2}", m = @"\d{1,2}", y = @"\d{4}" }
或者您可以传递2位数的字符串作为您的日/月路线值..但您可能会在某些地方错过这个并且有死链接,所以我建议路线约束修复..
如果你找到一个解决方法 - 请给我发邮件^ _ ^
答案 1 :(得分:1)
Artiom基本上是正确的。由于ActionLink代码指定了路径值中的单个数字整数,因此单个数字会对您的约束失败。因此,您可以像Artiom建议的那样更改约束,或稍微修改ActionLink代码,使路径值为“字符串”(双引号):
Html.ActionLink("Blog Entry - 12/01/2010", "Retrieve", "Blog", new { d = "12", m = "01", y = "2010" }, null)