7

私は、約 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

ここまでは順調ですね。

4

5 に答える 5

9

Request.QueryString は NameValueCollection であるため、「パラメーター」を取得する最も簡単な方法は次のとおりです。

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

あなたの機能はどこにありますか?ページのコード ビハインドで実行している場合は、HttpContext 変数を使用する必要はありません。

于 2008-12-26T20:21:30.133 に答える
8

クエリ文字列から値を取得しようとしているようです。

たとえば、この URL の場合:-

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

クエリ文字列パラメーター param1 と param2 の値を取得したいと思いますか?

その場合は、次を使用してください:-

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

それ以外の場合、これらのパラメーターがフォーム (HTTP POST 要求) に含まれている場合は、Mitchel Sellers が提案する方法を使用してください。

于 2008-12-26T20:02:45.223 に答える
1

名前がわかっている場合は、次を使用してキー値で取得できます

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

それ以外の場合は、フォーム コレクションをキーなどでループして値を取得できます。重要なのは、本当に 54 項目すべてを解析する必要があるかということです。それとも、いくつかの特定の値を探しているだけですか?

于 2008-12-26T19:28:42.780 に答える
1
httpcontext.Current.Request.QueryString("KeyName")
于 2014-06-16T09:36:06.263 に答える
0

Request.Params には、目的のクエリ パラメータが含まれます。

Request.URL からの情報は既に解析されているため、解析する必要はありません。

于 2008-12-26T20:11:46.890 に答える