【问题标题】:MVC Routing parameters with Hyphen带连字符的 MVC 路由参数
【发布时间】:2014-09-22 00:58:38
【问题描述】:
我们正在将旧网站重建为新的 MVC 网站,我想将旧网址重定向到新网址。
旧网址是这样构建的 /p-{productid}-{productname}.aspx
但是 productname 参数也可能包含连字符。所以网址可能是/p-123-product-name.aspx。
如果我将此规则添加到 mvc RouteCollection,第一个参数值将是:
productid = 123-产品
产品名称 = 名称
有没有办法让 productid 参数“不贪心”?
【问题讨论】:
标签:
asp.net
asp.net-mvc
asp.net-mvc-4
routing
asp.net-mvc-routing
【解决方案1】:
您可以在路由中添加约束,并使用正则表达式来指定 id。假设您要去一个名为“products”的控制器,并且视图名为 ShowProdcut,并且 id 包含 3 个或更多数字,您的路线可能如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
name: "Products",
defaults: new {controller = "Products", action = "ShowProduct"},
url: "Products/p-{productId}-{productName}",
constraints: new {productId= @"\d{3,}"}
);
}
显然,如果您的 id 更复杂,您将需要不同的正则表达式。