2017-09-01 114 views
0

发生意外的错误,我无法连接到REST API为1 2的网址.NET HttpWebRequest的:基础连接已关闭:上一个发送

iContact.com有2个网址为他们的REST API。

下面的代码将在第一URL

https://app.sandbox.icontact.com/icp/a/

工作,但会失败以下网址

https://app.icontact.com/icp/a/

代码详细

  • 这是一个控制台应用程序
  • 应用程序写在VB.net .Net框架4.5
  • 的NuGet软件包Newtonsoft.JSON

错误: 基础连接已关闭:意外发送时发生错误。 SendFailure {4}

故障排除:

  • 确认不使用铬ARC应用测试休息APPI
  • 能ping通网站
  • 沙盒URL防火墙问题能够连接并检索结果
  • 虽然提供的凭据是伪造的,但您应该能够获得证书错误而不是连接关闭

代码主要模块:

Imports System.Net 
Module MainModule 
    Sub Main() 
     Try 
      Dim MyRequest As HttpWebRequest 
      MyRequest = IContactManager.BuildJsonRequest 
      Dim iContactSecurityInformation As ContactClass 
      iContactSecurityInformation = IContactManager.GetiContactSecurityInformation(MyRequest) 
     Catch ex As Exception 

     End Try 
    End Sub 
End Module 

类:

Imports Newtonsoft.Json.Linq 
Imports System.Net 
Imports System.IO 
Imports System.Web.Script.Serialization 
Imports System.Text 

Public Class ContactClass 
    Public AppId As String 
    Public BaseUrl As String 
    Public Username As String 
    Public Password As String 
    Public AccountId As String 
    Public ClientFolderId As String 
    Public TestMode As Boolean 
End Class 

Public Class IContactManager 
    Public Shared Function BuildJsonRequest() As HttpWebRequest 
     Dim uri = New Uri(Convert.ToString(My.Settings.Base_URL + "a/")) 
     'Production 
     Dim request = DirectCast(WebRequest.Create(uri), HttpWebRequest) 
     request.Method = "Get" 
     request.Accept = "application/json" 
     request.ContentType = "application/json" 
     request.Headers.Add("Api-Version", "2.2") 
     request.Headers.Add("Api-AppId", "fakeID") 
     request.Headers.Add("Api-Username", "FakeUser") 
     request.Headers.Add("Api-Password", "FakePassword") 

     Return request 
    End Function 
    Public Shared Function GetiContactSecurityInformation(request As HttpWebRequest) As ContactClass 
     Dim Acct As New ContactClass 
     Dim a 
     Try 
      Using response = DirectCast(request.GetResponse(), HttpWebResponse) 
       Using reader = New StreamReader(response.GetResponseStream()) 
        Dim jsonData = reader.ReadToEnd() 
        Dim serializer = New JavaScriptSerializer() 
        a = serializer.Deserialize(Of ContactClass)(jsonData) 
       End Using 
      End Using 
     Catch exc As System.Net.WebException 
      Dim webResponse = TryCast(exc.Response, System.Net.HttpWebResponse) 
      If webResponse IsNot Nothing AndAlso webResponse.StatusCode = System.Net.HttpStatusCode.Unauthorized Then 
       Console.WriteLine("401") 
      Else 
       Throw 
      End If 
     End Try 

     Return Acct 
    End Function 
End Class 

回答

1

我找到了答案,你只需要使用服务点经理不工作

网址

ServicePointManager.SecurityProtocol = SecurityProtocolT ype.Tls12

相关问题