#vb.net
#vb.net
Вопрос:
привет, мне нужно отправить строку json на сервер, но я продолжаю получать сообщение об ошибке
Базовое соединение было закрыто: при отправке произошла непредвиденная ошибка.
Я попытался добавить эти два кода после исследования, но все равно получил ту же ошибку, есть идеи?
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
это мой полный код, postData представляет собой строку JsonConvert.SerializeObject(Dictionary)
Public Function PostToServer(thePostData As String, theConcatted As String, theNonce As String, theTimeStamp As String, theUri as Uri)
Try
'ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
Dim theRequest As HttpWebRequest = HttpWebRequest.Create(theUri)
Dim theByteArray As Byte() = Encoding.UTF8.GetBytes(thePostData)
theRequest.Method = "POST"
theRequest.ContentType = "application/json"
theRequest.Headers.Add("X-Authentication-Version", "1.1")
theRequest.Headers.Add("X-Authentication-Method", "SHA256WithRSA")
theRequest.Headers.Add("X-Authentication-KeyId", theKeyId)
theRequest.Headers.Add("X-Authentication-Nonce", theNonce)
theRequest.Headers.Add("X-Authentication-Timestamp", theTimeStamp)
theRequest.Headers.Add("X-Authentication-Sign", getDataSignature(theConcatted))
theRequest.ContentLength = theByteArray.Length
Dim theDataStream As Stream = theRequest.GetRequestStream()
theDataStream.Write(theByteArray, 0, theByteArray.Length)
theDataStream.Close()
Return True
Catch ex As Exception
Console.WriteLine(ex.Message)
Return False
End Try
End Function
Function getDataSignature(theData As String)
Dim theRSA As New RSACryptoServiceProvider
theRSA.FromXmlString(thePrivateKey)
Dim theRSAFormatter As New RSAPKCS1SignatureFormatter(theRSA)
theRSAFormatter.SetHashAlgorithm("SHA256")
Dim theSHhash As New SHA256Managed()
Dim theSignedHashValue As Byte() = theRSAFormatter.CreateSignature(theSHhash.ComputeHash(New UnicodeEncoding().GetBytes(theData)))
Dim theStringBuilder As New StringBuilder(theSignedHashValue.Length * 2)
For Each b As Byte In theSignedHashValue
theStringBuilder.Append(Conversion.Hex(b))
Next
Return theStringBuilder.ToString().ToLower()
End Function
Комментарии:
1. В какой системе выполняется этот код? Если это Windows 7, установите
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
. Вам нужен .Net Framework 4.5.2 (возможно, 4.7.2 ). Кроме того, установитеOption Strict On
в свойствах проекта и / или конфигурации общих параметров Visual Studio (Tools -> Options ->Projects and Solutions -> VB Defaults
. Установите для всех значениеOn
иCompare = Binary
). Кстати, я не вижу, чтобы вы читали ответ сервера, вы должны.2. АХ, спасибо, я только что понял, что я работаю только на Framework 4 вместо 4.5.2 . что объясняет, почему
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
это не вариант