Asp.net mvc3应用程序中的自定义约束

Asp.net mvc3应用程序中的自定义约束,asp.net,asp.net-mvc-3,Asp.net,Asp.net Mvc 3,我正在asp.net MVC3应用程序中创建一个自定义路由,我想创建一个路由约束,该约束将检查url是否包含整数作为参数的第二部分。如果是这样,我需要重定向到不同的操作 产品/12 product/12-2-1990我是这样做的 ''# MapRoute allows for a dynamic product ID routes.MapRoute("Products", "product/{id}", New With

我正在asp.net MVC3应用程序中创建一个自定义路由,我想创建一个路由约束,该约束将检查url是否包含整数作为参数的第二部分。如果是这样,我需要重定向到不同的操作

产品/12
product/12-2-1990

我是这样做的

    ''# MapRoute allows for a dynamic product ID
    routes.MapRoute("Products", "product/{id}",
                             New With {.controller = "product",
                                       .action = "index"},
                             New With {.id = "[0-9]+") ''# this forces the ID to only be a number.

然后分别创建重定向逻辑。我建议使用ActionFilter来完成重定向工作。您只需编写一次,就可以全面实现。

我需要使用IRouterConstraint来完成。我的想法是创建一个约束,检查第二条路径是否为数字,然后重定向到一个操作,否则返回到第二个操作方法为什么不在路由中捕获这两条路径,然后使用ActionFilter来决定重定向?我如何死记硬背地捕获这两条路径?您可以创建具有相同控制器和操作的两条路由destination(简单的方法),或者创建一个复杂的约束正则表达式来同时处理两者(更具挑战性)。然后将ActionFilter附加到
产品
控制器的
索引
操作