【问题标题】:How do you use querystrings with ASP.NET routing?如何在 ASP.NET 路由中使用查询字符串?
【发布时间】:2008-10-15 17:10:42
【问题描述】:

新的 ASP.NET 路由非常适合简单的路径样式 URL,但如果您想使用如下 URL:

http://example.com/items/search.xhtml?term=Text+to+find&page=2

您是否必须在验证中使用 catch all 参数?

【问题讨论】:

    标签: asp.net-mvc routing query-string


    【解决方案1】:

    您也可以将查询字符串参数与路由匹配,如果您只想捕获您需要添加参数的所有内容,如下所示:

    {*contentUrl}

    这会将 url 的其余部分填充到该变量中。

    【讨论】:

      【解决方案2】:

      路由中未列出的任何视图数据项都会自动映射到查询字符串,因此如果将“items/search.xhtml”映射到操作:

      Search(string term, int page)
      

      那么你应该得到你正在寻找的结果。

      【讨论】:

      • 没有任何关于其工作原理的出色文档,感谢您的回答。我想知道为什么 MVC 团队认为查询字符串如此糟糕,我认为它们在搜索和分页的情况下是有意义的
      • 在许多情况下,查询字符串还不错,只是人们会倾向于过度使用它们而不是使用 RESTful Urls。通过搜索,我可以看到它们有意义,但是分页?为什么不这样做:site.com/products/page/4
      【解决方案3】:

      我也无法将编码的 URL 作为路由参数传递给路由。

      您不能在 URL 中使用 url 编码的字符,但可以在查询字符串中使用。

      因此我需要我的路由也有一个查询字符串元素。

      假设我有一条路线:

      MapPageRoute("myroute", "myroute/{x}", "~/routehander.aspx")
      

      但我希望它采用以下形式:

      http://mywebsite.com/myroute/{x}?url=myurl
      

      我们可以这样做:

      Dim x as integer = 12
      Dim rvd As New Routing.RouteValueDictionary
      rvd.Add("x", x)
      rvd.Add("url", Server.UrlEncode("/default.aspx"))
      HttpContext.Current.ApplicationInstance.Response.RedirectToRoutePermanent("myroute", rvd)
      

      这会将我们重定向到以下网址:

      http://mywebsite.com/myroute/12?url=%252fdefault.aspx
      

      【讨论】:

        【解决方案4】:

        你仍然可以使用Request.QueryString["some_value"];

        【讨论】:

          猜你喜欢
          • 2011-10-19
          • 2010-11-01
          • 1970-01-01
          • 2014-08-23
          • 1970-01-01
          • 1970-01-01
          • 2013-06-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多