ASP .Net MVC路由不需要控制器和动作名称

3

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

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个回答

4

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

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

0

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

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

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接