Отправка запроса PUT HttpWebRequest в API Google Sheets - PullRequest
0 голосов
/ 26 октября 2018

Я работаю над отправкой объекта JSON в Google Sheet в ASP.NET.

  • Чтобы получить доступ к закрытому листу Google, мне сначала нужно реализовать OAuth2.0 и получить токен доступа. Но нужно ли сохранять его локально в моем приложении или он неявно пересылается при запросе API-интерфейсов Google листов?
  • Нужно ли передавать в заголовке запроса секрет клиента, ключ API и идентификатор клиента? Если так, какой правильный синтаксис для каждого. Например, apikey - это «ключ».

Я прочитал и перечитал документацию, но все еще не уверен, что нужно передать в методе ответа (указанном ниже).

Пока это то, что у меня есть:

Default.aspx.cs:

string requestUrl = string.Format(@"https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/Sheet1!C2:D5?valueInputOption=USER_ENTERED&key={apiKey}");
 JToken jTknRequests = GoogleSheetsAPI.PutWebJObject(requestUrl)["data"];

GoogleSheetsAPI.cs:

public static JObject PutWebJObject(string url, bool encapsulate = true)
{
    string stringResponse = PutWebResponse(url);

    if (encapsulate)
    {
        stringResponse = "{\"data\":" + stringResponse + "}";
    }
    JObject o = JObject.Parse(stringResponse);
    return o;
}

public static string PutWebResponse(string url)
{
    string stringResponse;

    HttpWebRequest httpWebRequest = (HttpWebRequest) WebRequest.Create(url);
    httpWebRequest.Method = WebRequestMethods.Http.Put;
    httpWebRequest.Accept = "application/json";

   // Do I need to send these?
   //httpWebRequest.Headers["access_token"] = ACCESS_TOKEN;
   //httpWebRequest.Headers["client_secret"] = CLIENT_SECRET ;

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
        string json = "{\"majorDimension\": \"ROWS\",\"range\": \"Sheet1!C2:D5\",\"values\": [[2,31],[5,6],[700000,8334],[3,4]]}";

        streamWriter.Write(json);
        streamWriter.Flush();
        streamWriter.Close();
    }

    HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        stringResponse = streamReader.ReadToEnd();
    }
    httpResponse.Close();
    return stringResponse;
}

Сейчас я получаю сообщение об ошибке 401: неавторизовано в методе GetResponse ().

...