Google Sheets API v4, исключение SocketException: существующее соединение было принудительно закрыто удаленным хостом

#c# #http #google-sheets

#c# #http #google-sheets

Вопрос:

Я прошел через множество решений. Я также попробовал одно решение здесь, но оно не сработало для меня. Поэтому, пожалуйста, не помечайте это как дубликат. Я работаю с Google Sheets API v4, и я получил следующие исключения:

 System.AggregateException: 'One or more errors occurred.'
 

Внутренние исключения:

 HttpRequestException: An error occurred while sending the request.

WebException: The underlying connection was closed: An unexpected error occurred on a send.

IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.

SocketException: An existing connection was forcibly closed by the remote host
 

когда я пытаюсь получить результат HttpResponseMessage. Ниже приведены мои коды:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Net;
using System.Text;
using System.Net.Http;
using System.Configuration;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Net.Security;
using System.Net.Http.Headers;
using System.Security.Cryptography.X509Certificates;

namespace ConsoleApp3
{
    static class Program
    {
        static string _apiKey;
        static string _sheetID;

        static string _baseUrl;
        static HttpClient _client;

        static Program()
        {
            _apiKey = ConfigurationManager.AppSettings["apiKey"];
            _sheetID = ConfigurationManager.AppSettings["sheetID"];

            _client = new HttpClient();
            _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;


            _baseUrl = "https://sheets.googleapis.com/v4/spreadsheets/{0}/values/{1}!{2}";

        }

        static void Main(string[] args)
        {
            using(HttpRequestMessage __request = new HttpRequestMessage())
            {
                __request.Method = HttpMethod.Post;
                __request.RequestUri = new Uri(string.Format(_baseUrl, _sheetID, "Sheet1", "A1:D3"));

                Dictionary<string, object> __parameters = new Dictionary<string, object>();
                __parameters.Add("key", _apiKey);

                __request.Content = new StringContent(__parameters.ToJson(), Encoding.UTF8, "application/json");
                

                using (HttpResponseMessage ___response = _client.SendAsync(__request).Result) // Error Here
                {
                    
                }
            }
            Console.ReadKey();
        }
    }
}
 

Ответ №1:

Это может быть проблема с кодировкой URL-адреса символа «:» в вашем запросе

используйте System.Web.HttpUtility.UrlEncode() , чтобы убедиться, что все символы в вашем идентификаторе листа, имени листа или местоположении ячейки закодированы правильно.

В вашем коде эта строка;

 __request.RequestUri = new Uri(string.Format(_baseUrl, HttpUtility.UrlEncode(_sheetID), "Sheet1", HttpUtility.UrlEncode("A1:D3")));
 

Комментарии:

1. Это помогает anw, но оно по-прежнему выдает те же исключения..