Asp.net mvc 不带控制器和操作名称的ASP.Net MVC路由

Asp.net mvc 不带控制器和操作名称的ASP.Net MVC路由,asp.net-mvc,routing,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

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

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的约束

我如何实现我想要的


谢谢

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

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

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

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

第四个参数是一个匿名对象,它为您定义的管线参数提供约束。匿名对象成员的名称对应于路由参数——在本例中为“控制器”或“操作”或“id”,这些成员的值为正则表达式,它们约束参数必须具有的值,以便匹配路由。“\d+”表示id值必须由一个或多个数字组成(仅限)。

不确定要实现什么,但看起来需要自定义路由约束。请看下面的示例:

记住先注册管线约束