2009-07-28 28 views
0

我需要從ReturnUrl查詢字符串訪問額外的查詢字符串參數。從ReturnUrl訪問額外的查詢字符串鍵

整個站點需要身份驗證,因此如果用戶未登錄或超時,所有頁面都將重定向到登錄頁面。所以www.mysite.com/Default.aspx?id=H1234將重新回到www.mysite.com/login.aspx?ReturnUrl=%2fDefault.aspx%3fid%3dH1234,如果用戶然後輸入他們的憑據,他們將返回到Default.aspx傳遞ID,但我也需要檢查登錄頁面上的ID。

開)的登錄頁面,我可以Server.UrlDecode(Request.RawUrl到:/login.aspx?ReturnUrl=/Default.aspx?id=H1234,但因爲這有2問號我現在不能訪問Request.QueryString("id")

我可以使用子方法提取的價值,但令我擔心,作爲標識不是固定長度,似乎不安全

似乎沒有被太多的谷歌(或至少我沒有問正確的問題)

回答

0

沒有答案?

這是我已經成功地放在一起:

Private Function GetParam(ByVal paramName As String, 
          ByVal paramMaxLength As Integer) As String 
    Dim paramValue As String = String.Empty 
    Dim url As String = Server.UrlDecode(Request.RawUrl()) 
    If Not url.Contains(paramName) Then 
    Return paramValue 
    End If 

    url = url.Substring(url.LastIndexOf("?") + 1) 
    ExtractParamValue(paramName, paramValue, url) 

    If paramValue.Length > paramMaxLength Then 
    paramValue = paramValue.Remove(paramMaxLength) 
    End If 

    Return paramValue 
End Function 

Private Shared Sub ExtractParamValue(ByVal paramName As String, 
            ByRef paramValue As String, 
            ByVal url As String) 
    For Each valuePair As String In url.Split("&") 
    If valuePair.StartsWith(paramName) Then 
     paramValue = valuePair.Substring(paramName.Length + 1) 
    End If 
    Next 
End Sub