我无法连接到2个URL的1个rest API
icontact.com有2个用于其REST API的URL。
以下代码将适用于第一个URL
" https://app.sandbox.icontact.com/icp/a/"
,但会因以下URL
而失败https://app.icontact.com/icp/a/
代码详细信息
- 这是一个控制台应用
- 该应用程序写在VB.NET .NET框架4.5 中
- nuget软件包newtonsoft.json
错误:基础连接已关闭:发送时发生了意外的错误。sendfailure {4}
故障排除:
- 使用Chrome Arc应用测试REST 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
我找到了答案,您只需要使用服务点管理器作为无法正常工作的URL
ServicePointManager.SecurityProtocol = SecurityProtocoColType.tls12