有更好的方法來解決這個問題。我與一個有相同要求的客戶打交道。這個班級也通過安全掃描飆升。
Public Class QueryStringManager
Public Shared Function BuildQueryString(ByVal url As String, ByVal queryStringValues As NameValueCollection) As String
Dim builder As New StringBuilder()
builder.Append(url & "?")
Dim count = queryStringValues.Count
If count > 0 Then
For Each key In queryStringValues.AllKeys
Dim value As String = queryStringValues(key)
Dim param As String = BuildParameter(key, value)
builder.Append(param)
Next
End If
Return builder.ToString()
End Function
Public Shared Function DeconstructQueryString(ByVal Request As HttpRequest) As NameValueCollection
Dim queryStringValues As New NameValueCollection
For Each key In Request.QueryString.AllKeys
Dim value As String = Request.QueryString(key)
value = DeconstructParameter(value)
queryStringValues.Add(key, value)
Next
Return queryStringValues
End Function
Private Shared Function BuildParameter(ByVal key As String, ByVal value As String) As String
Dim builder As New StringBuilder()
builder.Append(key.ToString() & "=")
value = GetSafeHtmlFragment(value)
Dim encrypt As Security = New Security()
value = encrypt.Encrypt(value)
builder.Append(value)
builder.Append("&")
Return builder.ToString()
End Function
Public Shared Function DeconstructParameter(ByVal value As Object) As String
Dim decrypt As New Security()
value = decrypt.Decrypt(value)
value = GetSafeHtmlFragment(value)
End Function
End Class
使用
Dim nvc As NameValueCollection = New NameValueCollection()
nvc.Add("value", 1)
Dim builtUrl As String = QueryStringManager.BuildQueryString(url, nvc)
Response.Redirect(builtUrl, false);
然後當你到你的頁面簡單地寫:
Dim decryptedValues As NameValueCollection = QueryStringManager.DeconstructQueryString(Request)
爲什麼我用NameValueCollection
是因爲這是同一類型的原因作爲QueryString。你可以建立基於它的屬性和它們的值的類,以將對象添加到QueryString中。這將所有複雜而乏味的邏輯封裝起來。
如果我只有一個querystring [「var」],那麼您的邏輯很有用。 Howerver,我的應用程序有近800頁,並且在查詢字符串中使用了不同的名稱。例如querystring [「abc」] = 1和querystring [「xyz」] = 2。我不確定確切的數字,但還有更多。非常感謝您的回覆。請提出一些更多的想法。 – Akie
編輯我的答案。 – Jeremy