未使用URL路由填充字符串参数

时间:2013-05-19 06:42:18

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

网址重写问题。当我使用以下链接给我打电话时

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+" }
);

1 个答案:

答案 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 }

);