我试图在路由中添加数字/int作为约束。
来源:路线
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("Product",
"{ProductName}/{ProductId}",
"~/Product.aspx",
false,
new RouteValueDictionary
{{"ProductName", "[a-z]"},{"ProductId", @"^\d+$"}}
);
}
这没问题:example.com/productX/1234
但是它正在打开Product.aspx,即使{ProductId}不是数字/int。
所以我不想去example.com/productY/xyz去Product.aspx的路。那条路怎么了?
第二个问题,{ProductName}可以包含字母、数字和破折号(-),如何将{ProductName}正则表达式更改为针对所有字母、数字和破折号(-)?
发布于 2017-09-20 04:55:35
似乎您使用了错误的过载来设置约束。您正在尝试设置defaults
而不是constraints
。这应该是可行的:
routes.MapPageRoute("Product",
"{ProductName}/{ProductId}",
"~/Product.aspx",
false,
null,
new RouteValueDictionary
{{"ProductName", "[a-z]"},{"ProductId", @"^\d+$"}}
);
请注意defaults
参数的defaults
。
至于ProductName
约束,您可以使用@"^[A-Za-z0-9\-]+$"
。您的最终代码如下:
routes.MapPageRoute("Product",
"{ProductName}/{ProductId}",
"~/Product.aspx",
false,
null,
new RouteValueDictionary
{{"ProductName", @"^[A-Za-z0-9\-]+$"},{"ProductId", @"^\d+$"}}
);
发布于 2017-09-20 04:22:51
关于你的第一个问题请看:https://stackoverflow.com/a/273144
第二:尝试@"^[a-zA-Z0-9-]+$"
https://stackoverflow.com/questions/46321258
复制