Неверный запрос при публикации XML в REST-подобный сервис - спецсимволы - PullRequest
0 голосов
/ 22 августа 2009

Я интегрирую приложение со службой (iContact), которая описывает его API как «подобный отдыху». Я отправляю XML, и все работает нормально ... Пока я не отправлю специальные символы, такие как --øå - тогда я получаю сообщение об ошибке "неверный запрос" с сервера.

<contacts>
  <contact>
    <firstname>Søren</firstname>
    <lastname>ÆbleTårn</lastname>
  </contact>
</contact>

Я пытался поместить значения имени и фамилии в cdata, но это не помогло.

Есть ли какая-либо кодировка, которую я могу применить к значениям (аналог html-encode), или мне нужно двигаться в другом направлении?

Я сомневаюсь, что проблема специфична для .Net, но ответ может быть таким, поэтому вот код, который я использую:

Dim xml as string = GenerateXml()
Dim http As New HttpClient("http://uri.to/rest")
Dim resp As HttpResponseMessage = http.Post(String.Empty, HttpContent.Create(xml))

Ответы [ 3 ]

1 голос
/ 22 августа 2009

Вероятно, этот веб-сервис не использует ту же кодировку набора символов, что и ваше приложение. Типичные кодировки UTF-8 или UTF-16. Посмотрите в документации по сервису (или, если это не получится, посмотрите в ответе сервиса) кодировку символов и посмотрите, указана ли кодировка. Если он указан, убедитесь, что он соответствует кодировке, используемой в запросе вашего клиента.

Хорошей практикой также является XMLEncode данных.

1 голос
/ 22 августа 2009

Вы можете использовать числовые объекты в XML для решения некоторых проблем кодирования:

<firstname>S&#xf8;ren</firstname>

Но вы все равно должны быть уверены, что сервер закодирован правильно, чтобы получать, обрабатывать и хранить эти символы. Трудно понять, где здесь ошибка ...

0 голосов
/ 22 августа 2009

Получив ответы в правильном направлении, я написал эту функцию для xmlencode текста.

Public Function XmlEncode(ByVal text As String) As String
    For i As Integer = 127 To 255
        text = Replace(text, Chr(i), "&#" & i.ToString & ";")
    Next
    return text
End Function

Я уверен, что это может быть более эффективным, но производительность на самом деле не является проблемой, так как она будет работать редко.

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