【发布时间】:2023-03-28 15:41:01
【问题描述】:
我在任何地方都找到了零信息,希望有人可以帮助我。
我正在尝试使用标准 .NET 流写入器向 Authorize.Net 发送支付处理字符串。我使用的语言是 Visual Basic,但即使是 C# 示例也将不胜感激!
这是我的代码:
strPost = "x_FirstName=John&x_LastName=Smith&x_Phone=1234567..ETC..."
Dim myWriter As StreamWriter = Nothing
Dim objRequest As HttpWebRequest = CType(WebRequest.Create("https://secure2.authorize.net/gateway/transact.dll"), HttpWebRequest)
objRequest.Method = "POST"
objRequest.ContentLength = strPost.Length
objRequest.ContentType = "application/x-www-form-urlencoded"
Try
myWriter = New IO.StreamWriter(objRequest.GetRequestStream())
myWriter.Write(strPost)
Catch e As Exception
Return e.Message
Finally
myWriter.Close()
End Try
如果我运行此代码并在页面上的文本框中输入文本(提供 strPost 变量的值),它就可以正常工作。
但是,如果我在文本框中输入国际字符(例如名字),或从另一个网页复制/粘贴某人的姓名,则会失败并显示以下消息:
“/”应用程序中的服务器错误。 在写入所有字节之前无法关闭流。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.IO.IOException:在写入所有字节之前无法关闭流。
例如,如果使用字母 á 而不是 a,则会失败并显示上述错误消息。
如何将此代码修改为 UTF-8 或去掉这些字符等并停止接收该消息?
提前谢谢你!
-- 克里斯·李
【问题讨论】:
-
如果您将字符串转换为具有正确编码的字节并改为写入字节会发生什么?类似 GetRequestStream().Write(byteArray, 0, byteArray.Length)
-
嗨 the_lotus,请原谅我问这个问题,因为我对此有点陌生,但是我应该把它放在哪里/如何?
-
喜欢这个? myWriter = New IO.StreamWriter(objRequest.GetRequestStream().Write(byteArray, 0, byteArray.Length) )
-
正如内容类型
application/x-www-form-urlencoded所说:字符串应该是urlencoded。在发送字符串之前使用UrlEncode。 -
关闭前尝试flush():myWriter.Flush()