带有连字符的MVC路由参数

时间:2014-07-30 11:39:55

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

我们正在重建旧网站到新的MVC网站,我想将旧网址重定向到新网址。

旧网址的构建方式如下/p-{productid}-{productname}.aspx 但是productname参数也可能包含连字符。所以网址可以是/p-123-product-name.aspx

如果我将此规则添加到mvc RouteCollection,则第一个参数值将为:

productid = 123-product

productname = name

有没有办法让productid参数'不贪心'?

1 个答案:

答案 0 :(得分:0)

您可以为路线添加约束,并使用正则表达式指定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更复杂,你需要一个不同的正则表达式。