没有控制器和操作名称的ASP .Net MVC路由

时间:2011-06-21 09:22:44

标签: asp.net-mvc routing

简单的问题。我想要这样的东西:

http:/ / www.mywebsite.com/microsoft或http:/ / www .mywebsite.com / apple 所以微软和苹果应该像id一样,但我就像默认的控制器一样使用它

这是默认路线

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "index", id = UrlParameter.Optional } // Parameter defaults
        );

这会产生类似http:/ / www.mywebsite .com / home / aboutus或http://www.mywebsite .com / products / detail / 10

我添加了另一条路线

routes.MapRoute(
            "Partner", // Route name
            "{id}", // URL with parameters
            new { controller = "Home", action = "Partners"}, // Parameter defaults
            new { id = @"\d+" }
        );

但是这个约束只允许数字id。

我如何实现我想要的目标。

感谢

3 个答案:

答案 0 :(得分:4)

如果表达式只能包含字母和数字,则可以修改约束:

routes.MapRoute(
    "Partner", // Route name
    "{id}", // URL with parameters
    new { controller = "Home", action = "Partners"}, // Parameter defaults
    new { id = @"^[a-zA-Z0-9]+$" }
);

答案 1 :(得分:0)

如果您不想提供数字约束,只需删除第4个参数,即

routes.MapRoute("Partner", "{id}", new { controller = "Home", action = "Partners"});

第4个参数是一个匿名对象,它为您定义的路径参数提供约束。匿名对象成员的名称对应于路由参数 - 在本例中为“controller”或“action”或“id”,这些成员的值为正则表达式,用于约束值参数必须具有匹配路线。 “\ d +”表示id值必须由一个或多个数字组成(仅限)。

答案 2 :(得分:0)

不确定您要实现的目标,但看起来您需要自定义路径约束。看一看这个例子:

http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Custom-route-constraint-to-validate-against-a-list.aspx

请记住首先注册路线约束