2009-07-22 17 views
14

我們繼承了一些C#代碼作爲來自另一家公司的項目的一部分,它執行URL重定向,修改現有查詢字符串,更改項目的值,添加新的參數等。然而,問題在於代碼最好是bug,並且最終會在查詢字符串中複製項目而不是正確更新它們。代碼適用於第一遍,但在其他調用中複製問題變得明顯。URL Querystring - 查找,替換,添加,更新值?

例:?MyPage.aspx開始日期= 8月22日/ 09 &開始日期= 9月22日/ 09

而不是複製它需要用新的值或者更新,如果它已經存在的項目,或如果不在那裏,就添加。

是否有一個用於處理查詢字符串的C#類或函數集,允許訪問和更新/添加繞過這些問題的參數的簡單方法,而不是現在似乎正在使用的盲添加方法?這需要能夠處理隨時可能存在或可能不存在的多個參數,並在隨後的調用中添加和更新。

如果可能的話,我們會盡早使用現有的邏輯,而不是重新創建某些內容,以便以半標準方式快速解決問題,以便將來進行可維護性和重用。

回答

26

是的,我會建議使用HttpUtility.ParseQueryString()

然後,您可以找到查詢字符串轉換爲收集/添加/更新/從這個集合重新創建查詢字符串前集合中直接替換值。

這應該會更容易找到重複。

+0

你會如何建議從NameValueCollection重新創建QueryString? – tjrobinson 2010-01-13 10:02:58

0

您可以通過Request.QueryString集合訪問和操作Querystring的所有值。這是一個link

+2

我覺得這是隻讀的,雖然,你不能改變的Request.QueryString值直接 – tjrobinson 2010-01-13 09:58:06

0

這似乎是一個基本的設計問題。

而不是更新當前的查詢字符串,應該做的是簡單地在基礎上添加所有參數。

當然,你可以更新,但(僞)

if querystring exists 
    then update query string 
else 
    add query string 

當你開始使用超過1個變量將變得瘋狂。

重新設計將是最好的,努力允許。