好的,我到处寻找我能想到寻找这个简单事情的答案,但我找不到它。我有一个简单的路由,其中一个常量作为URL的一部分。
routes.MapRoute(
name: "TagNamed",
url: "tag/{name}/X({mytag}",
defaults: new { controller = "Tag", action = "Index" }
);
routes.MapRoute(
name: "Tag",
url: "tag/X({mytag}",
defaults: new { controller = "Tag", action = "Index" }
);
到目前为止,这对我来说效果很好。我可以有一个像
这样的网址http://localhost:64899/tag/X(foo,Q(bar))
我到达了我需要去的地方。但是只要URL中有另一个“X(”,我就会收到404错误。这会失败,例如:
http://localhost:64899/tag/X(foo,X(bar))
对我有什么建议吗?
答案 0 :(得分:1)
虽然可以使用样板文本作为路线的一部分,但似乎不是最佳做法。我修改后的路线如下:
routes.MapRoute(
name: "Tag",
url: "tag/{tag}",
defaults: new { controller = "Tag", action = "Index" },
constraints: new { tag = @"X\(.+" }
);
我真正需要使用的是约束。随着这一小改变,404问题消失了。
答案 1 :(得分:0)
Url重写和路由是ASP.NET MVC将URI与操作匹配的方式。 MVC 5支持一种称为属性路由的新型路由,它也适用于ASP.NET vNext。属性路由使用属性来定义路由。属性路由使我们能够更好地控制Web应用程序中的URI。
仍然完全支持MVC4或更早版本的路由,称为基于约定的路由。事实上,MVC5的主要优点是,我们可以在同一个应用程序中结合使用这两种技术。在本文中,我将尝试介绍ASP.NET MVC5中属性路由和URL重写的基本功能和选项。
Here是完整的例子。