https://pastein.ru/t/xMs

  скопируйте уникальную ссылку для отправки

Загрузка данных


using System.Net.Http.Json;
using System.Net;
using System.Text;
using Newtonsoft.Json;
using static CloudRequestSender;

static void Main()
{
    MainAsync().Wait();
}

Main();

static async Task MainAsync()
{
    // документацию по API можно изучить здесь: https://xn--90aia9aifhdb2cxbdg.xn--p1ai/public_download/docs/Cloud/online/ru/user/ru-RU/programmer/guides.html

    // создаём объект CloudRequestSender с API-ключом
    CloudRequestSender requestSender = new CloudRequestSender("3bejz51ikxkcr17bx6gehir4on53uuqio57ogeurio718ks3yhcy");

    // получаем ID корневой папки с шаблонами
    dynamic templateRootFolder = await requestSender.SendRequestAsync("https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Templates/Root", CloudRequestSender.RequestMethod.GET);

    // выгружаем файл в папку Шаблоны в МоиОтчеты Облако
    dynamic template = await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Templates/Folder/{templateRootFolder.id}/File",
        CloudRequestSender.RequestMethod.POST, boxFileVM);

    // экспортируем отправленный шаблон в PDF
    dynamic export = await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Templates/File/{template.id}/Export", CloudRequestSender.RequestMethod.POST,
        new ExportVM() { fileName = "exportedByScript.pdf", format = "Pdf" });
    System.Threading.Thread.Sleep(1500);

    // скачиваем результат экспорта в PDF
    await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/download/e/{export.id}",
        CloudRequestSender.RequestMethod.GET);

    // удаляем шаблон из Облака
    await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Templates/File/{template.id}",
        CloudRequestSender.RequestMethod.DELETE);

    // удаляем экспортированный файл из Облака
    await requestSender.SendRequestAsync($"https://xn--80ab2acne.xn--e1aflibyb2b0b.xn--p1ai/api/rp/v1/Exports/File/{export.id}",
        CloudRequestSender.RequestMethod.DELETE);
}
public class CloudRequestSender
{
    public enum RequestMethod { POST, GET, PUT, DELETE }
    private string apiKey;

    public CloudRequestSender(string apiKey)
    {
        this.apiKey = apiKey;
    }

    public async Task<dynamic> SendRequestAsync(string request, RequestMethod method, object body = null)
    {
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", $"Basic {Base64Encode("apikey:" + apiKey)}");
        client.DefaultRequestHeaders.Add("User-Agent", "Cloud API user");
        client.DefaultRequestHeaders.Add("accept", "text/plain");

        Console.WriteLine($"sending {method} request to {request}");
        HttpResponseMessage response;
        string json;
        StringContent data;
        switch (method)
        {
            case RequestMethod.GET:
                response = await client.GetAsync(request);

                if (response.Content.Headers.ContentType.MediaType == "application/octet-stream")
                {
                    Console.WriteLine($"{method} request to {request} returned {response.StatusCode}");
                    if (response.StatusCode != HttpStatusCode.OK) return null;

                    using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
                    {
                        using (var fs = new FileStream("../../../Загрузки/ОтчётЭкспорт.pdf", FileMode.Create, FileAccess.Write, FileShare.None, 4096, true))
                        {
                            await streamToReadFrom.CopyToAsync(fs);
                        }
                    }
                    return null;
                }
                break;
            case RequestMethod.POST:
                if (body == null) throw new ArgumentException("You can't have body equal to null in POST request");

                json = JsonConvert.SerializeObject(body);
                data = new StringContent(json, Encoding.UTF8, "application/json");
                response = await client.PostAsync(request, data);
                break;
            case RequestMethod.PUT:

                if (body == null)
                {
                    response = await client.PutAsync(request, null);
                }
                else
                {
                    json = JsonConvert.SerializeObject(body);
                    data = new StringContent(json, Encoding.UTF8, "application/json");
                    response = await client.PutAsync(request, data);
                }
                Console.WriteLine($"{method} request to {request} returned {response.StatusCode}");
                return null;
            case RequestMethod.DELETE:
                response = await client.DeleteAsync(request);
                Console.WriteLine($"{method} request to {request} returned {response.StatusCode}");
                return null;
            default:
                return null;
        }
        Console.WriteLine($"{method} request to {request} returned {response.StatusCode}");
        var jsonResult = await response.Content.ReadFromJsonAsync<object>();
        return JsonConvert.DeserializeObject<dynamic>(jsonResult.ToString());

    }

    // простой метод для конвертации текста в base64
    private static string Base64Encode(string plainText)
    {
        var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
        return System.Convert.ToBase64String(plainTextBytes);
    }
    public struct FileVM
    {
        // название файла с расширением (.frx для шаблонов, .fpx для отчётов)
        public string name;
        // здесь можно добавить тэги
        public string[] tags;
        // здесь можно задать изображение в качестве иконки файла
        public string icon;
        // содержимое файла в base64
        public string content;
    }
    public struct ExportVM
    {
        // здесь можно задать параметры экспорта
        public string[] exportParameters;
        // название файла (включая формат экспорта)
        public string fileName;
        // папка для созданного экспорта (корневая по умолчанию)
        public string folderId;
        // формат экспорта
        public string format;
        // здесь можно задать параметры отчёта
        public string reportParameters;
    }
    public static FileVM boxFileVM = new FileVM()
    {
        name = "createdByScript.frx",
        tags = new string[] { "generated" },
        icon = null,
        content = Convert.ToBase64String(File.ReadAllBytes($"../../../Шаблоны/Список сотрудников.frx"))
    };
}