在我的 Wix 站点上使用 API 接收时出现意外错误
Unexpected error occurred on a receive using API on my Wix site
我已经使用 post 对我的 Wix 站点 API 的请求制作了一个实验性的电子邮件和密码系统,并且我已经通过 curl 和 postman 验证了它的工作原理。但是,当尝试在我的 VB.NET 应用程序中使用它时,我收到错误消息:“基础连接已关闭:接收时发生意外错误。”我之前已经 运行 出现“无法创建 SSL/TLS 安全通道”错误,但是当我将项目的 .NET 框架移至 4.7.1 并确保将 SecurityProtocol 设置为 SystemDefault 时,该错误已解决Wix 似乎使用 TLS 1.3。但是现在我收到这个错误,我不知道如何解决,因为请求中的所有内容看起来都不错:
ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault
Dim req As HttpWebRequest = DirectCast(WebRequest.Create(New Uri("https://xxxxx.com/mysite/_functions/check?email=" & email & "&pass=" & LCase(passHash))), HttpWebRequest)
req.Method = "POST"
req.ContentType = "none"
req.ContentLength = 0
req.Host = "test"
req.KeepAlive = True
Dim result As HttpWebResponse = req.GetResponse()
运行'req.GetReponse()'时抛出错误。
在查看了 .NET POST 请求的无数版本的示例代码和有关此错误的问题之后,但似乎每个人都建议设置安全协议类型,我已经完成并将其设置为系统默认值是我唯一不这样做的方法' 获取内部服务器错误状态。另一个是将 KeepAlive 设置为 false,我也尝试过但没有任何区别。
这可能是什么问题?以下是 postman header 中包含的内容,如果有帮助的话:
好的,所以最终我最终更改了我的代码以使用 GetResponseAsync() 而不是 GetResponse()(但这对问题没有任何影响)并将协议类型设置回 .NET 4.8 上的 Tls12。最后似乎 req.Host 设置是导致响应问题的原因,Wix 似乎不喜欢它。我还在请求中添加了一些额外的设置,但最终它们对响应没有影响。这是最终的工作代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Dim req As HttpWebRequest = WebRequest.CreateHttp("https://example.com/check?email=" & email & "&pass=" & LCase(passHash))
req.Method = "POST"
req.ContentType = "none"
req.ContentLength = 0
req.KeepAlive = True
req.CookieContainer = New CookieContainer()
req.UserAgent = "Test"
req.Accept = "ext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
req.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-US;q=0.9,en;q=0.5")
req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate;q=0.8")
req.Headers.Add(HttpRequestHeader.CacheControl, "no-cache")
Dim statusCode As HttpStatusCode = Nothing
Try
Using result As HttpWebResponse = CType(Await req.GetResponseAsync(), HttpWebResponse)
statusCode = result.StatusCode
End Using
If statusCode = HttpStatusCode.OK Then
MsgBox("Valid")
Else
Dim response As String = New StreamReader(req.GetResponse().GetResponseStream()).ReadToEnd()
MsgBox(response)
End If
Catch webEx As WebException
MsgBox(New StreamReader(webEx.Response.GetResponseStream()).ReadToEnd())
End Try
我已经使用 post 对我的 Wix 站点 API 的请求制作了一个实验性的电子邮件和密码系统,并且我已经通过 curl 和 postman 验证了它的工作原理。但是,当尝试在我的 VB.NET 应用程序中使用它时,我收到错误消息:“基础连接已关闭:接收时发生意外错误。”我之前已经 运行 出现“无法创建 SSL/TLS 安全通道”错误,但是当我将项目的 .NET 框架移至 4.7.1 并确保将 SecurityProtocol 设置为 SystemDefault 时,该错误已解决Wix 似乎使用 TLS 1.3。但是现在我收到这个错误,我不知道如何解决,因为请求中的所有内容看起来都不错:
ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault
Dim req As HttpWebRequest = DirectCast(WebRequest.Create(New Uri("https://xxxxx.com/mysite/_functions/check?email=" & email & "&pass=" & LCase(passHash))), HttpWebRequest)
req.Method = "POST"
req.ContentType = "none"
req.ContentLength = 0
req.Host = "test"
req.KeepAlive = True
Dim result As HttpWebResponse = req.GetResponse()
运行'req.GetReponse()'时抛出错误。 在查看了 .NET POST 请求的无数版本的示例代码和有关此错误的问题之后,但似乎每个人都建议设置安全协议类型,我已经完成并将其设置为系统默认值是我唯一不这样做的方法' 获取内部服务器错误状态。另一个是将 KeepAlive 设置为 false,我也尝试过但没有任何区别。
这可能是什么问题?以下是 postman header 中包含的内容,如果有帮助的话:
好的,所以最终我最终更改了我的代码以使用 GetResponseAsync() 而不是 GetResponse()(但这对问题没有任何影响)并将协议类型设置回 .NET 4.8 上的 Tls12。最后似乎 req.Host 设置是导致响应问题的原因,Wix 似乎不喜欢它。我还在请求中添加了一些额外的设置,但最终它们对响应没有影响。这是最终的工作代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Dim req As HttpWebRequest = WebRequest.CreateHttp("https://example.com/check?email=" & email & "&pass=" & LCase(passHash))
req.Method = "POST"
req.ContentType = "none"
req.ContentLength = 0
req.KeepAlive = True
req.CookieContainer = New CookieContainer()
req.UserAgent = "Test"
req.Accept = "ext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
req.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-US;q=0.9,en;q=0.5")
req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate;q=0.8")
req.Headers.Add(HttpRequestHeader.CacheControl, "no-cache")
Dim statusCode As HttpStatusCode = Nothing
Try
Using result As HttpWebResponse = CType(Await req.GetResponseAsync(), HttpWebResponse)
statusCode = result.StatusCode
End Using
If statusCode = HttpStatusCode.OK Then
MsgBox("Valid")
Else
Dim response As String = New StreamReader(req.GetResponse().GetResponseStream()).ReadToEnd()
MsgBox(response)
End If
Catch webEx As WebException
MsgBox(New StreamReader(webEx.Response.GetResponseStream()).ReadToEnd())
End Try