На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> есть ли класс для разбора строки запроса?
    здравствуйте!

    Есть строка, аналогичная строке http запроса.
    "lang=ru&name=Jon&password=12345"
    без кавычек, естественно.
    Юникодные символы, кодируются через '%'.

    Надо бы эту строку, как-то разобрать. Желательно в коллекцию NameValueCollection.

    Оно, конечно и ручками можно.
    Только ведь во фреймворке, должна быть соответствующая утилитка.
    WebUtil, как я понял, только символы декодирует.
      Request.QueryString
        Признаться, класс для разбора строки запроса я не знаю, но собсно тут посплитить строку через '&', потом через '=' и escape-последовательности разрулить через HttpUtility.UrlDecode, я так разумею.
        Сообщение отредактировано: UncleBob -
          Цитата UncleBob @
          тут посплитить строку через '&', потом через '=' и escape-последовательности разрулить через HttpUtility.UrlDecode


          Дык я и говорю, что ручками можно.
          Но нафига велосипедить, ведь где-то уже это сделано.
          Тем более WebUtilite.UrlDecode появился только в dot net 4.5, а под хрюшей его ещё нет.

          Но наверное, проще будет именно посплитить.

          Добавлено
          Цитата MIF @
          Request.QueryString


          Простите, не понял. А ссылочку можно?

          Нашел целых три класса, в sql, sharepoint и web.administration. Но кажись, всё не то.

          Добавлено
          О! Сам наткнулся на класс HttpUtility. Надеюсь он меня устроит.
          Сообщение отредактировано: Eric-S -
            Цитата Eric-S @
            Надеюсь он меня устроит.

            чем?
              метод ParseQueryString
              http://msdn.microsoft.com/ru-ru/library/ms...(v=vs.100).aspx

              Действительно, он меня устроил.

              На входе передаю строку, на выходе получаю коллекцию значений.

              Это срез кода, исключительно для примера.
              ExpandedWrap disabled
                // получить контекст
                HttpContext  context = Listener.EndGetContext( result );
                HttpRequest request = context.Request;
                HttpResponse response = context.Response;
                 
                // коллекция post запроса
                NameValueCollection post;
                if( request.HasEntityBody )
                {
                 
                // получить текст запроса
                StreamReader sr = new StreamReader( request.InputStream, request.ContentEncoding );
                String input = sr.ReadToEnd();
                 
                // разобрать
                Post = HttpUtility.ParseQueryString( input );
                }


              Там пока непонятно с кодировкой.
              Написал без неё, всё заработало как нужно.

              Это я парсю, тело запроса, для получения данных отправленных из формы, методом post.

              Сам поток, перекодирую в строку, с указанной кодировкой, классом System.IO.StreamReader.

              Так текст запроса, закодирован ещё url encode.

              Сейчас вроде всё нормально. Надеюсь сюрпризов не вылезет. Так что тему закрываю.
              Сообщение отредактировано: Eric-S -
                Цитата Eric-S @
                Сам наткнулся на класс HttpUtility


                Цитата UncleBob @
                разрулить через HttpUtility.UrlDecode

                правда, занятно :D
                  Ха-эм. Действительно занятно. Извиняюсь, тупанул.

                  Я почему-то подумал на WebUtilite. Перед этим, как раз его мусолил.

                  Глюки восприятия, однако. Извиняюсь.
                  Сообщение отредактировано: Eric-S -
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0244 ]   [ 16 queries used ]   [ Generated: 29.03.24, 11:27 GMT ]