【问题标题】:Getting the Request Variables from an ASP.NET page从 ASP.NET 页面获取请求变量
【发布时间】:2008-12-26 19:23:47
【问题描述】:

我编写了以下函数,它在大约 95% 的时间内都可以正常工作,但我需要它来 100%(显然)工作:

Public Shared Function getPassedVars() As String   
    Const keyCount As Integer = 54 ' 54 seems to be the number of parameter keys passed by default (for this web_app).
    '                                there are more if there is a form involved (ie. from search page)

    Dim oParams As String = ""
    Try
        With HttpContext.Current
            If .Request.Params.AllKeys.Count > keyCount Then
                For i As Integer = 0 To (.Request.Params.AllKeys.Count - (keyCount + 1))
                    oParams &= String.Format("{0}={1}{2}", .Request.Params.Keys.Item(i), .Request.Params(i), IIf(i < .Request.Params.AllKeys.Count - (keyCount + 1), ";", ""))
                Next
            End If
        End With
        Return oParams
    Catch ex As Exception
        Return Nothing
    End Try
End Function

它会清除Request.Params 对象中传递的变量,这些变量位于数组的开头(其余的是ASP 参数)。我很确定我已经看到了一种不同的方法来获取这些参数,但我无法弄清楚。有什么建议吗?

编辑

所以看起来我可以使用Request.URL.Query 来实现这一点,我将对此进行调查并回复。

这是我想出的:

Public Shared Function getPassedVars() As String
    Dim oParams As String = ""
    Dim qString As String = ""
    Dim oSplit As New List(Of String)
    Try
        With HttpContext.Current
            qString = .Request.Url.Query
            If qString.Length > 0 Then 'do we have any passed variables?
                If qString.StartsWith("?") Then qString = qString.Remove(0, 1) 'remove leading ? from querystring if it is there
                oSplit.AddRange(qString.Split("&"))
                For i As Integer = 0 To oSplit.Count - 1
                    oParams &= String.Format("{0}{1}", oSplit.Item(i), IIf(i < oSplit.Count - 1, ";", ""))
                Next
                Return oParams
            Else
                 Return Nothing
            End If
        End With
    Catch ex As Exception
        Return Nothing
    End Try
End Function

到目前为止一切顺利。

【问题讨论】:

  • “这些参数”到底是什么意思?另外,您意识到 Request.QueryString、Request.Params 和 Request.Form 都是 NameValueCollections?
  • “这些参数”是我从一个页面到另一个页面传递的变量,比如faq.aspx?cid=1。有些页面有不止一个这样传递的变量,我想得到所有这样传递的变量

标签: asp.net vb.net parameters request


【解决方案1】:

Request.QueryString 是一个 NameValueCollection,因此获取“参数”的最简单方法是执行以下操作:

    foreach (String s in Request.QueryString) {
        Response.Write(s + " = " + Request.QueryString[s]);
    }

您的函数位于何处?如果它在后面的页面代码中执行,那么您肯定不需要使用 HttpContext 变量。

【讨论】:

  • 它位于我的 APP_CODE 文件夹内的 Functions.vb 文件中,因此 HttpContext.Current 是必需的。感谢您的输入,该循环可能会在不久的将来派上用场:)
【解决方案2】:

您似乎正在尝试从查询字符串中获取值。

例如,对于这个 URL:-

http://www.tempuri.org/mypage.aspx?param1=x&param2=y

我假设您想要检索查询字符串参数 param1 和 param2 的值?

如果是这样,只需使用:-

Dim param1 as String = Request.QueryString("param1")

否则,如果这些参数包含在表单(HTTP POST 请求)中,则使用 Mitchel Sellers 建议的方法。

【讨论】:

    【解决方案3】:

    如果你知道名字,你可以使用下面的键值来获取它

    Dim myParamValue as String = Request.Form("MyKeyName")
    

    否则,您可以通过按键等方式循环遍历表单集合以获取值。关键是,你真的需要解析所有 54 个项目吗?还是您只是在寻找一些特定的值?

    【讨论】:

    • 我不一定知道变量的名称,尽管我在所有页面中使用了大约 5 个不同的名称。如果您阅读循环,它只会通过前几个(由我的 keyCount var 分隔)而不是全部
    【解决方案4】:
    httpcontext.Current.Request.QueryString("KeyName")
    

    【讨论】:

      【解决方案5】:

      Request.Params 将包含您需要的查询参数。

      无需解析 Request.URL 中的信息,因为它已经为您完成了。

      【讨论】:

      • 是否有 255 个字符的限制?
      猜你喜欢
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多