HTTP GET-кодировка для вызовов веб-сервисов - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть веб-сервис, который я звоню из C #.Мне удалось успешно получить ответ с помощью простых запросов GET, таких как:

http://localhost:8080/cgi-bin/py-wps.cgi?service=wps&version=1.0.0&request=describeprocess&identifier=test

Однако при выполнении более сложных запросов ответ всегда является ошибкой.

http://localhost:8080/cgi-bin/py-wps.cgi?service=wps&version=1.0.0&request=execute&identifier=test&datainputs=[key1=val1,val2,val3;key2=val4;key3=val5]

Веб-сервисы, которые я вызываю, публикуются с использованием PyWPS, и используемые мной строки запроса действительны, если они размещены в браузере.

Я пытался экранировать все значения в парах ключ-значение:

e.g. "datainputs=[key1="+Uri.EscapeDataString("val1"), ...

Я также пробовал комбинации

HttpUtility.UrlEncode

и

HttpUtility.UrlPathEncode

Я получаю ошибки, такие как: Exception exceptionCode = "MissingParameterValue" locator = "key1"

Я не уверен, что делаю неправильно, но эти URL работают правильно в моем браузеретак что я подозреваю, что я их неправильно кодирую.Мне не удалось найти ни одного сообщения, в котором одна пара ключ-значение содержит список пар ключ-значение (т. Е. Datainputs = [key1 = v1, v2, v2; ... и т. Д.)

Любая помощь по этому вопросу приветствуется.

Редактировать: Вот как я звоню в веб-службу

var targetUri = new Uri(uri);
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(targetUri);
        req.Method = method.ToUpper();
        req.ContentLength = 0;
        req.ContentType = "text/xml";

        HttpWebResponse response = (HttpWebResponse)req.GetResponse();
        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);

        string responseString = reader.ReadToEnd();

        reader.Close();
        responseStream.Close();
        response.Close();

        return responseString;

1 Ответ

0 голосов
/ 17 декабря 2011

Ваши знаки '=' в "[key1 = val1, val2, val3; key2 = val4; key3 = val5]" должны быть дважды экранированы.Попробуйте экранировать значение входных данных, а затем экранировать полный URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...