如何在包含斜杠(/)时创建匹配参数的Route?

时间:2011-05-04 17:09:42

标签: asp.net-mvc asp.net-mvc-3

我的ASP.NET MVC App中只有一条路径:

routes.MapRoute(
    "Post",
    "post/{url}",
    new { controller = "Blog", action = "Post" }
);

当我转到/post/MyTestBlahBlah时,它正确匹配,并调用Blog.Post(网址)。

然而,当我去/post/2010/03/MyTestBlahBlah时,我得到了404。

如果路线中存在斜杠,如何使路线匹配网址?

注意:我的网址不是固定为/年/月/日,它们可以是任何格式,这就是为什么我要匹配所有网址。我需要它被捕获并传递到控制器(而不是使用“*”)来帮助测试 - 我不希望Controller从Response对象中读取URL。

2 个答案:

答案 0 :(得分:4)

在你的情况下,我会在之前添加一条新的路线那条路线:

routes.MapRoute(
    "Post_Verbose",
    "post/{year}/{month}/{url}",
    new { controller = "Blog", action = "Post" });

或者简单地说:

routes.MapRoute(
    "Post",
    "post/{*url}",
    new { controller = "Blog", action = "Post" });

答案 1 :(得分:2)

我设法找到了解决方案here。您需要在参数名称({*url})前加上“*”。具有讽刺意味的是,我尝试的第一件事是{url*}

routes.MapRoute(
    "Post",
    "post/{*url}",
    new { controller = "Blog", action = "Post" }
);