Asp.net mvc 当参数包含斜杠(/)时,如何创建与参数匹配的路由?
我的ASP.NET MVC应用程序中只有一条路由:Asp.net mvc 当参数包含斜杠(/)时,如何创建与参数匹配的路由?,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我的ASP.NET MVC应用程序中只有一条路由: routes.MapRoute( "Post", "post/{url}", new { controller = "Blog", action = "Post" } ); 当我转到/post/MyTestBlahBlah时,它会正确匹配,并调用Blog.post(url) 然而,当我进入/post/2010/03/MyTestBlahBlah时,我得到了一个404 如何使路由与URL匹配,即使其中有斜杠 注意:我的U
routes.MapRoute(
"Post",
"post/{url}",
new { controller = "Blog", action = "Post" }
);
当我转到/post/MyTestBlahBlah
时,它会正确匹配,并调用Blog.post(url)
然而,当我进入/post/2010/03/MyTestBlahBlah
时,我得到了一个404
如何使路由与URL匹配,即使其中有斜杠
注意:我的URL不固定为/year/month/post,它们可以是任何格式,这就是我希望匹配所有URL的原因。我需要捕获它并将其传递到控制器(而不是使用“*”)以帮助测试-我不希望控制器从响应对象读取URL。在您的情况下,我会在此处描述的路由之前添加一个新路由:
routes.MapRoute(
"Post_Verbose",
"post/{year}/{month}/{url}",
new { controller = "Blog", action = "Post" });
或者简单地说:
routes.MapRoute(
"Post",
"post/{*url}",
new { controller = "Blog", action = "Post" });
在您的情况下,我会在此处描述的路线之前添加一条新路线:
routes.MapRoute(
"Post_Verbose",
"post/{year}/{month}/{url}",
new { controller = "Blog", action = "Post" });
或者简单地说:
routes.MapRoute(
"Post",
"post/{*url}",
new { controller = "Blog", action = "Post" });
我设法找到了解决办法。您需要在参数名称前面加一个“*”(
{*url}
)。讽刺的是,我尝试的第一件事是{url*}
routes.MapRoute(
"Post",
"post/{*url}",
new { controller = "Blog", action = "Post" }
);
我设法找到了解决办法。您需要在参数名称前面加一个“*”(
{*url}
)。讽刺的是,我尝试的第一件事是{url*}
routes.MapRoute(
"Post",
"post/{*url}",
new { controller = "Blog", action = "Post" }
);
我的URL不是以这种格式固定的,这就是为什么我需要匹配它们。一开始我实际上没有“/post/”,但我想添加它可以避免人们告诉我使用“*”,因为我需要将URL传递到操作中。所有捕获路由的问题是它们往往会破坏很多特定的东西。传递整个url的目的是什么,利用路由系统将url部分分离为相关参数是否有意义?我正在利用路由系统-我将有许多路由(例如/archive/{year}/{month}和/{page}),但是我的帖子可以使用任何剩余的格式,这意味着它们必须是一条综合路线(并且将是最后一条路线)。我刚刚意识到我在问题中提到了“单一路线”。我意识到为什么看起来我忽略了路由——实际上,这只是因为我试图先让这条路由工作,因为其他路由都很琐碎。抱歉造成混乱@Matthew因为我自己的答案没有得到rep(并且在几天内无法标记),如果你编辑你的答案以包含“{*url}”,我会将它标记为答案并删除我的答案。感谢您的帮助:-)我的URL不是固定格式的,这就是为什么我需要匹配所有URL。一开始我实际上没有“/post/”,但我想添加它可以避免人们告诉我使用“*”,因为我需要将URL传递到操作中。所有捕获路由的问题是它们往往会破坏很多特定的东西。传递整个url的目的是什么,利用路由系统将url部分分离为相关参数是否有意义?我正在利用路由系统-我将有许多路由(例如/archive/{year}/{month}和/{page}),但是我的帖子可以使用任何剩余的格式,这意味着它们必须是一条综合路线(并且将是最后一条路线)。我刚刚意识到我在问题中提到了“单一路线”。我意识到为什么看起来我忽略了路由——实际上,这只是因为我试图先让这条路由工作,因为其他路由都很琐碎。抱歉造成混乱@Matthew因为我自己的答案没有得到rep(并且在几天内无法标记),如果你编辑你的答案以包含“{*url}”,我会将它标记为答案并删除我的答案。谢谢你的帮助:-)