【问题标题】:Url Routing for unknown number of params未知数量参数的 URL 路由
【发布时间】:2013-08-28 07:13:18
【问题描述】:

我看过这篇文章:MVC Handler for an unknown number of optional parameters,但它适用于 MVC,似乎对我不起作用,因为我收到错误:

A path segment that contains more than one section, such as a literal section or a parameter, cannot contain a catch-all parameter.

我希望能够在 URL 中包含不确定数量的参数,我有以下路线:

RouteCollection.MapPageRoute("ManyParam", "{*params}.html", "~/Default.aspx");

这似乎也触发了上面的错误信息。

如何设置路由以在 Web 表单(不是 MVC)中包含未知数量的参数。

我正在尝试实现以下网址:

www.example.com/some-thing.html
www.example.com/some-thing/else.html
www.example.com/and/some-thing/else.html
www.example.com/1/2/3/4/5/6.html

编辑

当我使用以下内容时它似乎工作:

RouteCollection.MapPageRoute("ManyParam", "{*params}", "~/Default.aspx");

问题在于它不允许 .html 结尾。

【问题讨论】:

  • 你能展示你想要的 Url 的样子吗?你的"{*params}.html" 并没有很清楚你想要实现什么......
  • @AlexeiLevenkov - 那会很有用...已添加,谢谢。
  • 尝试使用"{*path}" 作为Url 并有某种constraint,最后需要.html,使用MapPageRoute 的5 个参数覆盖
  • @AlexeiLevenkov - 我试过了:RouteCollection.MapPageRoute("ManyParam", "{*path}.html", "~/Default.aspx"); 但我得到了错误:A path segment that contains more than one section, such as a literal section or a parameter, cannot contain a catch-all parameter. 最后我用.html 做错了吗?
  • 我尝试添加粗略样本作为答案...

标签: c# asp.net routing routes custom-routes


【解决方案1】:

以下未经测试的路线 - 通配符必须绝对是 Url 的最后一部分。因此,要在最后强制使用“.html”,您需要使用约束(第 5 个参数)。

routes.MapPageRoute(
    "ManyParam",
    "{*path}",
    "~/Default.aspx",
    false,
    new RouteValueDictionary(),
    new RouteValueDictionary { { "path", @".*\.html" } }
 );

【讨论】:

  • 那不是 MVC 吗?我没有控制器。
  • @webnoob - 编辑可能更正确 - 关键是你必须使用约束,因为你不能有任何过去的通配符段。
  • 好吧,这符合我一直在运行的测试。我将使用 Web 表单查找约束条件,看看我能做什么。感谢您的宝贵时间。
  • 完美运行(对语法稍作调整)。再次感谢您的宝贵时间。
猜你喜欢
  • 2015-10-19
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
相关资源
最近更新 更多