从ReturnUrl访问其他查询字符串键

时间:2009-07-28 08:17:41

标签: forms-authentication

我需要从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")

我可以使用子字符串方法来提取值,但这让我担心,因为id不是固定的长度,而且似乎不安全

Google上似乎没有多少(或者至少我没有问正确的问题)

1 个答案:

答案 0 :(得分: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