Data Json при отправке POST Запроса в C#

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Подскажите как правильно отправлять post Запрос с json

Пытаюсь выполнить код
C#:
{
\"images\":{
\"0\":\"{base64_img0}\",
\"1\":\"{base64_img1}\",
\"2\":\"{base64_img2}\",
\"3\":\"{base64_img3}\",
    \"4\":\"{base64_img4}\",
\"5\":\"{base64_img5}\",
\"6\":\"{base64_img6}\",
\"7\":\"{base64_img7}\",
\"8\":\"{base64_img8}\"
},
    \"target\":\"{do_caphca}\",
\"method\":\"hcaptcha_base64\",
    \"type\":\"grid\",
    \"choices\":[],
\"sitekey\":\"{sitekey}\",
    \"site\":\"{site}\",
\"ln\":\"en\",
    \"softid\":\"chromeExt_V1.7.6\"
}
Ругается
107522

Кавычки экранировал но все равно что-то не так. Подсвечивает но не пойму почему

107523
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 682
Благодарностей
1 866
Баллы
113
В тексте ошибки указан номер строки, смотрите там, возможно проблема в синтаксисе.
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 130
Благодарностей
486
Баллы
83
По-моему ранее уже была такая тема. Пару дней назад. Причина ошибки - вы используете символ $ перед строкой. Это означает, что символы открытия и закрытия фигурных скобок тоже надо экранировать. А теперь перейдем к более правильному и корректному способу формирования данного типа переменной, основываясь на том JSON, который Вы прислали.


1. Создаем проект, топаем в https://app.quicktype.io/ и автоматически генерируем DTO для нашей JSON'ки.

2. Копируем класс в созданный проект. Предварительно подключаем директивы using и общий код.
107531

Класс:
// Captcha Data class
     
public  class CaptchaData
    {
        [JsonProperty("images")]
        public Dictionary<string, string> Images { get; set; }

        [JsonProperty("target")]
        public string Target { get; set; }

        [JsonProperty("method")]
        public string Method { get; set; }

        [JsonProperty("type")]
        public string Type { get; set; }

        [JsonProperty("choices")]
        public List<object> Choices { get; set; }

        [JsonProperty("sitekey")]
        public string Sitekey { get; set; }

        [JsonProperty("site")]
        public string Site { get; set; }

        [JsonProperty("ln")]
        public string Ln { get; set; }

        [JsonProperty("softid")]
        public string Softid { get; set; }
    }
3. В общий код добавляем эту директиву
C#:
using Global.ZennoLab.Json;
В директивы добавляем эти:
C#:
using Global.ZennoLab.Json;
using Global.ZennoLab.Json.Linq;
using Global.ZennoLab.Json.Converters;
using System;
using System.Collections.Generic;
using System.Globalization;
4. Идём в кубик и начинаем строить.
C#:
var captchaData = new CaptchaData()
{
    Images = new Dictionary<string, string>
        {
            { "0", "{base64_img0}" },
            { "1", "{base64_img1}" },
            { "2", "{base64_img2}" },
            //...добавьте остальные изображения
        },
        Target = "{do_captcha}",
        Method = "hcaptcha_base64",
        Type = "grid",
        Choices = new List<object>(), // добавьте выбор, если он есть
        Sitekey = "{sitekey}",
        Site = "{site}",
        Ln = "en",
        Softid = "chromeExt_V1.7.6"
};
return JsonConvert.SerializeObject(captchaData, Formatting.Indented);
 

Вложения

  • Спасибо
Реакции: SlipDez и Oleg1987

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
631
Благодарностей
543
Баллы
93
Подскажите как правильно отправлять post Запрос с json

Пытаюсь выполнить код
C#:
{
\"images\":{
\"0\":\"{base64_img0}\",
\"1\":\"{base64_img1}\",
\"2\":\"{base64_img2}\",
\"3\":\"{base64_img3}\",
    \"4\":\"{base64_img4}\",
\"5\":\"{base64_img5}\",
\"6\":\"{base64_img6}\",
\"7\":\"{base64_img7}\",
\"8\":\"{base64_img8}\"
},
    \"target\":\"{do_caphca}\",
\"method\":\"hcaptcha_base64\",
    \"type\":\"grid\",
    \"choices\":[],
\"sitekey\":\"{sitekey}\",
    \"site\":\"{site}\",
\"ln\":\"en\",
    \"softid\":\"chromeExt_V1.7.6\"
}
Ругается
Посмотреть вложение 107522
Кавычки экранировал но все равно что-то не так. Подсвечивает но не пойму почему

Посмотреть вложение 107523
если правильно понял, то тебе нужно собрать тело запроса для сервиса из этой темы:

C#:
Dictionary<string, string> images = new Dictionary<string, string>();
for (int i = 0; i < imagesBase64.Count(); i++)
{
    images.Add($"{i}", $"{imagesBase64[i]}");
}

string jsonBody = Global.ZennoLab.Json.JsonConvert.SerializeObject(new {images, target, method, ln});

где:

imagesBase64 - лист картинками каптчи
target - текст задания
method - статичный текст "hcaptcha_base64"
ln - язык задания каптчи
 
  • Спасибо
Реакции: SlipDez

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
Ilshakin

Оказывается все дело было в том, что при переносе строк в формате Json надо было делать так
"строка1" +
"строка2" и тд. Спасибо приложен красивый работающий код
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
В лс можно написать?
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
n0n3mi1y

Хорошее подробное решение, спасибо
 

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
631
Благодарностей
543
Баллы
93

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)