Asp.net mvc 不带控制器和操作名称的ASP.Net MVC路由
简单的问题。我想要像这样的东西: http://www.mywebsite.com/microsoft或http://www.mywebsite.com/apple 所以微软和苹果应该像id一样,但我在默认情况下就像控制器一样使用它 这是默认路线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
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值必须由一个或多个数字组成(仅限)。不确定要实现什么,但看起来需要自定义路由约束。请看下面的示例: 记住先注册管线约束