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中,确保你在那里添加你的自定义路由。 本文精美地涵盖了它。