【问题标题】:URL Querystring - Find, replace, add, update values?URL Querystring - 查找、替换、添加、更新值?
【发布时间】:2010-11-12 22:23:03
【问题描述】:

我们从另一家公司继承了一些 C# 代码作为项目的一部分,该公司执行 URL 重定向,根据需要修改现有查询字符串、更改项目值、添加新参数等。然而,问题是代码充其量是错误的,并且最终会复制查询字符串中的项目而不是正确更新它们。该代码在第一次通过时有效,但在其他调用中重复问题变得明显。

例如:MyPage.aspx?startdate=08/22/09&startdate=09/22/09

如果它已经存在,则需要使用新值更新它,而不是复制该项目,或者如果不存在则添加它。

是否有用于处理查询字符串的 C# 类或函数集,允许通过简单的方法访问和更新/添加参数来解决这些问题,而不是现在似乎与代码一起使用的盲目添加方法?这需要能够处理可能始终存在或不存在的多个参数,并在后续调用中添加和更新。

如果可能的话,我们宁愿使用现有的逻辑而不是重新创建一些东西,以便以半标准的方式快速解决这个问题,以便未来的可维护性和重用性。

【问题讨论】:

    标签: c# url query-string


    【解决方案1】:

    您可以通过 Request.QueryString 集合访问和操作 Querystring 的所有值。这是link

    【讨论】:

    • 我认为这是只读的,您不能直接更改 Request.QueryString 中的值
    【解决方案2】:

    是的,我建议使用 HttpUtility.ParseQueryString() 将查询字符串转换为集合

    然后,您可以直接在集合中查找/添加/更新/替换值,然后从该集合重新创建查询字符串。

    这应该更容易发现重复。

    【讨论】:

    • 您如何建议从 NameValueCollection 重新创建 QueryString?
    • 我可以想到一些代码方法,但它们并不适合 cmets 框。这是 StackOverflow - 作为一个问题提出 - 我相信你会得到几个答案:D
    • @tjrobinson var qsCol = HttpUtility.ParseQueryString(Request.Url.Query); querystring = qsCol.ToString();
    【解决方案3】:

    这似乎是一个基本的设计问题。

    不是更新当前的查询字符串,应该做的只是每次都将所有参数添加到基中。

    当然,你可以更新它,但是(伪代码)

    if querystring exists
      then update query string
    else
      add query string
    

    当你开始使用超过 1 个变量时会发疯。

    重新设计是最好的,可以努力。

    【讨论】:

      【解决方案4】:

      ASP.NET 上可用的WCF REST Starter Kit 还包括一个新的“HttpQueryString”帮助器类,它很可能会在 .NET 4.0 时间范围内包含在基类库中。

      在此处观看有关如何使用此实用程序类的精彩截屏视频:

      http://channel9.msdn.com/shows/Endpoint/endpointtv-Screencast-HttpClient-Query-String-and-Form-Input-Management/

      马克

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-09
        • 2020-10-13
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 2012-02-12
        相关资源
        最近更新 更多