我在我的asp.net mvc 2网站上有一条看起来像这样的路线
routes.MapRoute(
"media_display",
"Media/{mediaId}-{mediaName}",
new { controller = "Media", action = "Display" },
new { mediaId = @"\d+" }
);
其中mediaId是id,mediaName是媒体的标题。 一个例子
www.example.com/Media/1-test-media-list
如果id为1,且名称为“test media list”,则问题在于我用 - 替换空格“”,这会破坏我的路线。
我无法弄清楚如何制作这个“mediaName”可以包含 - 。
我也有以下的问题,但解决方案应该是相同的。
routes.MapRoute(
"media_display",
"Media/{mediaId}-{mediaName}/edit",
new { controller = "Media", action = "Edit" },
new { mediaId = @"\d+" }
);
也可以制作一条能够捕捉以下3个示例的路线,现在我只有3条不同的路线,但我想减少它。
www.example.com/Media/1-test-media-list
www.example.com/Media/1 -
www.example.com/Media/1
答案 0 :(得分:1)
我认为更优雅,更简单的解决方案是www.example.com/Media/1/test-media-list
。
如果您坚持使用您的网址示例,请执行以下路线:
routes.MapRoute(
"media_display",
"Media/{slug}",
new { controller = "Media", action = "Display" },
);
并使用this blog post中描述的技术将slug中的id,name或任何内容解析为动作参数。
答案 1 :(得分:0)
我使用在http://iridescence.no/post/Defining-Routes-using-Regular-Expressions-in-ASPNET-MVC.aspx
找到的正则表达式路线完成此操作routes.Add(
new RegexRoute(@"^Media\/(?<mediaId>\d+)-(?<mediaName>[^\/]*)$",
new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new {
controller = "Media", action = "Display", playlistName = "" })
}