ASP.NET MVC路由的无限URL参数

我需要一个实现,我可以在我的ASP.NET控制器上获得无限的参数。 如果我举个例子,会更好一些:

假设我会有以下url:

example.com/tag/poo/bar/poobar example.com/tag/poo/bar/poobar/poo2/poo4 example.com/tag/poo/bar/poobar/poo89 

正如你所看到的,它会在example.com/tag/后面得到无数个标签,斜杠在这里是一个分隔符。

在控制器上,我想这样做:

 foreach(string item in paramaters) { //this is one of the url paramaters string poo = item; } 

有没有已知的方法来实现这一点? 我怎样才能达到控制器的价值? 随着Dictionary<string, string>List<string>

注意 :

这个问题没有很好的解释海事组织,但我尽我所能来适应它。 英寸,随意调整它

喜欢这个:

 routes.MapRoute("Name", "tag/{*tags}", new { controller = ..., action = ... }); ActionResult MyAction(string tags) { foreach(string tag in tags.Split("/")) { ... } } 

抓住所有将给你的原始string。 如果你想要一个更优雅的方式来处理数据,你总是可以使用自定义的路由处理程序。

 public class AllPathRouteHandler : MvcRouteHandler { private readonly string key; public AllPathRouteHandler(string key) { this.key = key; } protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { var allPaths = requestContext.RouteData.Values[key] as string; if (!string.IsNullOrEmpty(allPaths)) { requestContext.RouteData.Values[key] = allPaths.Split('/'); } return base.GetHttpHandler(requestContext); } } 

注册路由处理程序。

 routes.Add(new Route("tag/{*tags}", new RouteValueDictionary( new { controller = "Tag", action = "Index", }), new AllPathRouteHandler("tags"))); 

在控制器中获取标签作为数组。

 public ActionResult Index(string[] tags) { // do something with tags return View(); } 

这就是所谓的全面 :

 tag/{*tags} 

为了防止有人在.NET 4.0中使用MVC,你需要小心你在哪里定义你的路由。 我很高兴去global.asax和添加这些答案(和其他教程)中所build议的路线,并没有取得任何进展。 我的路线都只是默认{controller}/{action}/{id} 。 向URL添加更多的段给了我一个404错误。 然后我发现了App_Start文件夹中的RouteConfig.cs文件。 事实certificate这个文件是由Application_Start()方法中的global.asax调用的。 所以,在.NET 4.0中,确保你在那里添加你的自定义路由。 本文精美地涵盖了它。