具有常量前缀的MVC路由

时间:2014-09-27 04:34:54

标签: asp.net-mvc routes

好的,我到处寻找我能想到寻找这个简单事情的答案,但我找不到它。我有一个简单的路由,其中​​一个常量作为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))

对我有什么建议吗?

2 个答案:

答案 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是完整的例子。