网址重写问题。当我使用以下链接给我打电话时
http://localhost:12719/product/18
它可以很好地将产品18链接到参数。但是,当我使用以下内容调用它时。
http://localhost:12719/product/apple
它没有将苹果产品名称映射到控制器,它认为您尝试调用apple类型的操作。
为什么它将数字而不是字符串映射到控制器参数? controller参数是一种字符串。
路由如下。
routes.MapRoute(
name: "product",
url: "product/{id}/{slug}",
defaults: new { controller = "product", action = "product", slug = UrlParameter.Optional },
constraints: new { id = @"\d+" }
);
答案 0 :(得分:1)
您已在约束中指定的正则表达式中指定id仅为数字。 constraints: new { id = @"\d+" }
删除它并且应该有效。因此,由于“product”不会通过\d+
测试,因此您将在操作中将id作为null。
routes.MapRoute(
name: "product",
url: "product/{id}/{slug}",
defaults: new { controller = "product", action = "product", slug = UrlParameter.Optional }
);