ASP.NET MVC URL路由

6
在ASP.NET MVC中,是否可以定义路由以根据URL的部分数据类型确定要使用哪个控制器?
例如:
routes.MapRoute("Integer", "{myInteger}", new { controller = "Integer", action = "ProcessInteger", myInteger = "" });

routes.MapRoute("String", "{myString}", new { controller = "String", action = "ProcessString", myString = "" });

本质上,我希望即使这些URL具有相同的部分数量,也能由不同的控制器处理:

mydomain/123

mydomain/ABC

P.S. 上面的代码并不能工作,但它表明了我想要实现的目标。

1个回答

7

如果您使用约束条件,是可以实现的:

如下所示:

 routes.MapRoute(
                "Integers",
                "{myInteger}",
                    new { controller = "Integer", action = "ProcessInteger"},
                    new { myInteger = @"\d+" }
          );

如果你将这个路由放在字符串路由的上面(不包含@"\d+"的约束条件),那么它将过滤掉任何包含整数的路由,并且没有整数的内容将通过并被你的string路由接收。
真正的技巧是路由可以根据正则表达式来过滤传入的内容,这就是你可以确定应该选择什么的方法。

没问题。我在ASP.NET MVC路由方面遇到了很多问题,足以填满一本书或几篇博客文章。只要我有机会完成它们。 - George Stocker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接