Получение переменных запроса со страницы ASP.NET - PullRequest
7 голосов
/ 26 декабря 2008

Я написал следующую функцию, которая работает около 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). Я почти уверен, что видел другой способ получить эти параметры, но я не смог понять это. Есть предложения?

EDIT

Похоже, я могу использовать 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

Пока все хорошо.

Ответы [ 5 ]

9 голосов
/ 26 декабря 2008

Request.QueryString - это NameValueCollection, поэтому самый простой способ получить «параметры» - это сделать следующее:

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

Где находится ваша функция? Если он выполняется в коде страницы, то вам определенно не нужно использовать переменную HttpContext.

8 голосов
/ 26 декабря 2008

Похоже, вы пытаетесь получить значения из строки запроса.

Например, для этого URL: -

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

Полагаю, вы хотите получить значения параметров строки запроса param1 и param2?

Если это так, просто используйте: -

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

В противном случае, если эти параметры содержатся в форме (запрос HTTP POST), используйте метод, предложенный Митчелом Селлерсом.

1 голос
/ 16 июня 2014
httpcontext.Current.Request.QueryString("KeyName")
1 голос
/ 26 декабря 2008

Если вы знаете имя, вы можете использовать следующее, чтобы получить его по значению ключа

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

В противном случае вы можете просмотреть коллекцию форм, по ключу и т. Д., Чтобы получить значения. Ключ в том, действительно ли вам нужно проанализировать все 54 элемента? Или вы просто ищете несколько конкретных значений?

0 голосов
/ 26 декабря 2008

Request.Params будет содержать параметры запроса, которые вы после.

Нет необходимости анализировать информацию из Request.URL, поскольку она уже сделана для вас.

...