title: C# HttpClient An existing connection was forcibly closed by the remote host
body: <p>I'm working on an integration with Alternative Payments using their <a href="http://www.alternativepayments.com/developers/API/?shell#create-transaction" rel="noreferrer">hosted page integration</a>. Their C# SDK does not have this integration available at the moment, but as you can see it's pretty simple and I made a small class to send the post request and get the JSON response.</p>
  
  <p>I tested the json object I'm sending on PostMan and cURL and both work, also the authentication header, so I think they are not the problem. Here is the constructor of my class:</p>
  
  <pre><code>public AlternativePaymentsCli(string apiSecretKey)
  {
      this._apiSecretKey = apiSecretKey;
  
      _httpClient = new HttpClient();
      _httpClient.DefaultRequestHeaders.Accept
          .Add(new MediaTypeWithQualityHeaderValue("application/json"));
  
      var authInfo = _apiSecretKey;
      authInfo = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:", _apiSecretKey)));
  
      // The two line below because I saw in an answer on stackoverflow.
      _httpClient.DefaultRequestHeaders.Add("Connection", "Keep-Alive"); 
      _httpClient.DefaultRequestHeaders.Add("Keep-Alive", "3600");
  
      _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Anything.com custom client v1.0");
      _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authInfo);
  
  }
  </code></pre>
  
  <p>And the method where I'm posting the data:</p>
  
  <pre><code>public string CreateHostedPageTransaction(HostedPageRequest req) 
  {
      var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
  
      // I send this same json content on PostMan and it works. The json is not the problem
      var content = new StringContent(JsonConvert.SerializeObject(req, settings), Encoding.UTF8, "application/json");
      var response = _httpClient.PostAsync(this._baseUrl + "/transactions/hosted", content).Result;
      var responseText = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
  
      if (response.IsSuccessStatusCode)
          return responseText;
  
      return "";
  }
  </code></pre>
  
  <p>Then I get this error: <code>An existing connection was forcibly closed by the remote host</code>, at the PostAsync line. This is the error details:</p>
  
  <pre><code>[SocketException (0x2746): An existing connection was forcibly closed by the remote host]
     System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult) +8192811
     System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult) +47
  
  [IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.]
     System.Net.TlsStream.EndWrite(IAsyncResult asyncResult) +294
     System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar) +149
  
  [WebException: The underlying connection was closed: An unexpected error occurred on a send.]
     System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext&amp; context) +324
     System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar) +137
  
  [HttpRequestException: An error occurred while sending the request.]
  </code></pre>
  
  <p>I'm using C# 4.5, Asp.Net MVC. I've been reading answers for the same error and none of them solved my issue so far. What am I missing in this code?</p>
  
  <p>Thanks for any help</p>