C# URL查询字符串-查找、替换、添加、更新值?

C# URL查询字符串-查找、替换、添加、更新值?,c#,url,query-string,C#,Url,Query String,我们从另一家公司继承了一些C#代码作为项目的一部分,该公司进行URL重定向,修改现有的查询字符串、更改项的值、添加新参数等。然而,问题是代码最多也有缺陷,最终会复制查询字符串中的项,而不是正确地更新它们。代码在第一次调用时工作,但在其他调用时,重复问题变得很明显 例如:MyPage.aspx?startdate=08/22/09&startdate=09/22/09 如果项目已经存在,则需要使用新值更新该项目,如果没有,则需要添加该项目,而不是复制该项目 是否有一个C#类或一组函数用于处理查询字

我们从另一家公司继承了一些C#代码作为项目的一部分,该公司进行URL重定向,修改现有的查询字符串、更改项的值、添加新参数等。然而,问题是代码最多也有缺陷,最终会复制查询字符串中的项,而不是正确地更新它们。代码在第一次调用时工作,但在其他调用时,重复问题变得很明显

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

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

是否有一个C#类或一组函数用于处理查询字符串,允许一种简单的方法来访问和更新/添加绕过这些问题的参数,而不是现在代码中使用的盲目添加方法?这需要能够处理多个参数,这些参数可能随时存在,也可能不存在,并在后续调用中添加和更新


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

您可以通过Request.Querystring集合访问和操作Querystring的所有值。这里有一个。

是的,我建议使用

然后,您可以直接在集合中查找/添加/更新/替换值,然后再从此集合重新创建querystring


这将使发现重复项变得更容易。

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

应该做的不是更新当前查询字符串,而是每次向基添加所有参数

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

当你开始使用一个以上的变量时会变得疯狂

在允许的情况下,重新设计是最好的。

ASP.NET上的可用帮助程序还包括一个新的“HttpQueryString”帮助程序类,该类很可能包含在.NET 4.0时间框架中的基类库中

请在此处查看有关如何使用此实用程序类的优秀屏幕广播:


Marc

不过我认为这是只读的,您不能直接更改Request.QueryString中的值。您建议如何从NameValueCollection重新创建QueryString?我可以想出一些代码方法,但它们实际上不适合放在注释框中。这是StackOverflow-作为一个问题提问-我相信你会得到几个答案:D@tjrobinson
var qsCol=HttpUtility.ParseQueryString(Request.Url.Query);querystring=qsCol.ToString()
if querystring exists
  then update query string
else
  add query string