[英]Infinite URL Parameters for ASP.NET MVC Route
我需要一个可以在我的 ASP.NET 控制器上获得无限参数的实现。 如果我给你一个例子会更好:
让我们假设我将有以下网址:
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>
?
笔记 :
这个问题没有很好地解释 IMO,但我尽力适应它。 in. 随意调整它
像这样:
routes.MapRoute("Name", "tag/{*tags}", new { controller = ..., action = ... });
ActionResult MyAction(string tags) {
foreach(string tag in tags.Split("/")) {
...
}
}
catch all 会给你原始字符串。 如果您想要一种更优雅的方式来处理数据,您始终可以使用自定义路由处理程序。
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}
万一有人要来此与MVC在.NET 4.0中,你需要一个定义你的路由要小心。 我很高兴去global.asax
并按照这些答案(和其他教程)中的建议添加路由,但一无所获。 我的路由都默认为{controller}/{action}/{id}
。 向 URL 添加更多段给了我 404 错误。 然后我在 App_Start 文件夹中发现了 RouteConfig.cs 文件。 原来这个文件是由global.asax
在Application_Start()
方法中调用的。 因此,在 .NET 4.0 中,请确保在那里添加自定义路由。 这篇文章很好地介绍了它。
例如,在 asp .net core 中,您可以在路由中使用 *
[HTTPGet({*id})]
此代码可以多参数或使用带斜杠的发送字符串时使用它们来获取所有参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.