API Google Sheets. Добавить метод выпуска. C# - PullRequest
0 голосов
/ 26 марта 2020

http://skrinshoter.ru/s/260320/rW7vMcEV?a

У меня возникла проблема, когда я пытаюсь добавить свою таблицу.

Мои Program.cs:

class Program
{
    private static GApiHandler gapi = GApiHandler.getInstance();
    static void Main(string[] args)
    {
        var db = new AppDbContext();
        var sheetInfo = db.SheetInfoes
            .Include(i => i.AMZ)
            .Include(i => i.Google)
            .Include(i => i.Template)
            .Include(i => i.Sheet)
            .Include(i => i.List)
            .Include(i => i.Operation)
            .FirstOrDefaultAsync().Result;
        //Console.WriteLine(JsonConvert.SerializeObject(sheetInfo));
        var row = new List<string>();
        row.Add("First Add");
        row.Add("Second column");
        row.Add("Third one");
        var append = new Append();
        append.values.Add(row);
        append.values.Add(row);
        append.values.Add(row);
        Console.WriteLine(JsonConvert.SerializeObject(append));
        gapi.Insert(sheetInfo, append);
        Console.WriteLine("Hello World!");
        Console.ReadKey();
    }
}      

Модель Append.cs:

public class Append
{
    public List<List<string>> values { get; set; }

    public Append()
    {
        values = new List<List<string>>();
    }
}    

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

public bool Insert(SheetInfo sheetInfo, Append append)
    {
        // tmp
        var spreadsheetId = sheetInfo.Sheet.Id;
        var range = "A2:Z5";
        var acc = sheetInfo.Google;
        //Console.WriteLine(values);
        var contentPairs = new[]
            {
                new KeyValuePair<string, string>("", JsonConvert.SerializeObject(append))
            };
        // end tmp
        var url = $"https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}:append?valueInputOption=ROW";
        Console.WriteLine(url);
        var response = RequestAsync(url, acc, contentPairs).Result;
        Console.WriteLine(response);

        return true;
    }       

RequestAsyn c метод:

public async Task<string> RequestAsync(string url, GoogleAcc acc, IEnumerable<KeyValuePair<string, string>> contentPairs = null)
    {
        if (acc != null && acc.ExpiresAt < DateTime.Now)
            await NewToken(acc);
        using (var client = new HttpClient())
        {
            HttpResponseMessage result = null;
            FormUrlEncodedContent content = null;

            if (acc != null) client.DefaultRequestHeaders.Add("Authorization", $"Bearer {acc.AccessToken}");
            client.DefaultRequestHeaders.Add("Accept", "application/json");

            if (contentPairs != null)
            {
                content = new FormUrlEncodedContent(contentPairs);
                result = await client.PostAsync(url, content);
            }
            else
            {
                result = await client.GetAsync(url);
            }

            return await result.Content.ReadAsStringAsync();
        }
    }

Вопрос в том, какой параметр запроса 'names' ??? Не задано ни одного параметра запроса 'names'.

Все отлично работает через 'TRY THIS API', когда я указываю 'spreadsheetId', 'range' и 'valueInputOption' - https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/append

Тело для запроса:

{

"values": [["First Add", "Second column", "Third one"], ["First Add", " Второй столбец "," Третий столбец "]]}

1 Ответ

1 голос
/ 27 марта 2020

var content = new StringContent (JsonConvert.SerializeObject (updateBatch));

Это простое решение. Я должен был использовать StringContent кроме FormUrlEncodedContent, конечно!

Я нашел FormUrlEncodedContent там в StackOverflow, так как мой VisualStudio IntelliSense не нашел StringContent (или я пропустил ключ 'new') ... и я начинаю думать, что там нет такого класса. Ох! .. Огромная ошибка!

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