JSON - WepAPI - при синтаксическом анализе значения обнаружен неожиданный символ - PullRequest
0 голосов
/ 02 июля 2018

ЛЮБАЯ помощь будет принята с благодарностью

У меня есть класс Generic, который облегчает вызовы WebAPI. Он существует довольно давно и не имеет проблем. Сегодня я получаю ошибку и не уверен, где отследить проблему. точная ошибка

{"Unexpected character encountered while parsing value: [. Path 'PayLoad', line 1, position 12."}

что я получаю в ответ на звонок

"{\"PayLoad\":[\"file_upload_null20180629155922²AAGUWVP2XUezeM3CiEnSOw.pdf\"],\"Success\":true,\"Message\":\"1 File(s) Uploaded\",\"Exceptions\":[]}"

Что выглядит правильно и что я ожидаю от сервисного вызова

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

        public static TR WebApiPost(string serveraddress, string endpoint, object data)
    {

        HttpResponseMessage msg;
        var clienthandler = new HttpClientHandler
        {
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(user, password, domain)
        };

        using (var client = new HttpClient(clienthandler) { BaseAddress = new Uri(serveraddress) })
        {
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            msg = client.PostAsync(endpoint, new StringContent(new JavaScriptSerializer().Serialize(data), Encoding.UTF8, "application/json")).Result;
        }

        var result = msg.Content.ReadAsStringAsync().Result;
        return JsonConvert.DeserializeObject<TR>(result);
    }

И, наконец, строка, которая фактически делает вызов (что не должно иметь значения)

returned = CallHelper<ResultStatus<string>>.WebApiPost(serviceurl, sendFileUrl, model);

1 Ответ

0 голосов
/ 02 июля 2018

Непонятно, откуда ваш веб-сервис получает значение PayLoad, поэтому вполне возможно, что это значение имеет метку байтового порядка (BOM) в начале. Это особенно актуально, если вы возвращаете содержимое того, что изначально было файлом в кодировке Unicode. Имейте в виду, что спецификация не отображается при просмотре строки в отладчике.

В веб-службе убедитесь, что вы не возвращаете спецификацию со значением PayLoad. Проверьте последовательность байтов в начале строки:

0xEF,0xBB,0xBF

Для получения дополнительной информации о метке порядка байтов: https://en.wikipedia.org/wiki/Byte_order_mark

...