2017-05-29 28 views
3

ここで何が間違っていますか?私はこのエラーを取得する上で、私は、コードを実行Httpクライアント既存の接続がリモートホストによって強制的に閉じられました

 var formContent = new FormUrlEncodedContent(new[] 
      { 
      new KeyValuePair<string, string>("mobile_numbers", "5555555555"), 
      new KeyValuePair<string, string>("message", "Whoo hahahahah") 
      });   

     HttpClient client = new HttpClient(); 
     client.BaseAddress = new Uri("https://api.iwin.co.za"); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "134134134"); 
     HttpResponseMessage response = client.PostAsync("iwin/api/v1/messages", formContent).Result; 

既存の接続を強制的に私は、コードの上に数回行って、すべてが正常に見える リモートホストによって閉じられました、いくつかの記事はエラーを示唆します

Http request

答えて

2

これは、クライアントとサーバーが使用するTLSプロトコルのバージョンに同意できない場合に発生します。

.NET 4.5.2以前ではv1がデフォルトで、v1.2がフレームワークに含まれている場合は非アクティブ化されていると思います。 (。純4.6では*、V1.2がデフォルトです。)

は4.5.2にバージョン1.2を有効にするには、使用することができます。

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; 

(私はこれは、アプリケーション全体のためにそれを可能に信じますドメイン?)

私にとって(別のウェブサイトに対して)、とにかく問題を解決しました。

+0

これは私が最後にやったことでした – Jack

1

以下

に応じてコードを変更してください私は、サーバーの問題です取得していますが、私はR-クライアントとしようとすると、それが正常に動作します

1)問題はhttpsです。あなたはそれのための適切な証明書を追加する必要があります。

HttpContent

private static HttpContent getHttpContent(string jsonString) 
     { 
      var content = new StringContent(jsonString, Encoding.UTF8, "application/json"); 
      return content; 
     } 

たり、開発や自己署名本命を扱うときは、次のように信頼できない証明書エラーを無視することができますcerificateエラー をバイパスすることができますし、JSONを変換する

Dictionary<string, string> formContent= new Dictionary<string, string>(); 
mapObject.Add("mobile_numbers","5555555555"); 
mapObject.Add("message","Whoo hahahahah") 

var jsonString = JsonConvert.SerializeObject(formContent); 

WebRequestHandler handler = new WebRequestHandler(); 
X509Certificate2 certificate = GetMyX509Certificate(); 
handler.ClientCertificates.Add(certificate); 

HttpClient client = new HttpClient(handler); 
client.BaseAddress = new Uri("https://api.iwin.co.za"); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
client.DefaultRequestHeaders.Add("Authorization", "Bearer 134134134"); 

HttpResponseMessage response = client.PostAsync("/iwin/api/v1/messages", getHttpContent(jsonString)).Result; 

別の関数:ServicePointManager.ServerCertificateValidationCallback + =(送信者、証明書、チェーン、sslPolicyErrors)=>真;

+0

クライアントのPostAsyncが文字列を受け入れることができないため、この仕事はありません – Jack

+0

私はそのことを忘れています。今すぐ更新するコードを更新しました。 –

+0

にも同じエラーが発生するリモートホストの内部例外によって既存の接続が強制的にクローズされました: {"要求の送信中にエラーが発生しました"} – Jack

関連する問題