VB.NET публикация с пользовательскими заголовками

#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 это не вариант