Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 当参数包含斜杠(/)时,如何创建与参数匹配的路由?_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

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

我的ASP.NET MVC应用程序中只有一条路由:

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}”,我会将它标记为答案并删除我的答案。谢谢你的帮助:-)