MVC ActionLink在添加约束后生成NON-Restul URL

时间:2010-04-16 09:01:45

标签: c# asp.net-mvc model-view-controller routing constraints

我有一个没有约束的自定义路由,可以使用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

额外信息:在自定义路线之前添加。

有什么想法吗? 干杯

2 个答案:

答案 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)

相关问题