我在任何地方都发现了零信息,希望有人能帮助我。
我正在尝试使用标准.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变量提供值),则可以正常工作。
但是,如果我在文本框(例如FirstName)中输入国际字符,或者从另一个网页复制/粘贴某人的名字,它将失败并显示以下消息:
“ /”应用程序中的服务器错误。 在所有字节写入之前无法关闭流。 说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。
异常详细信息:System.IO.IOException:在写入所有字节之前,无法关闭流。
例如,如果使用字母á代替字母a,它将失败并显示上面的错误消息。
如何将这段代码修改为UTF-8或删除那些字符等,并停止接收该消息?
提前谢谢!
-克里斯·李
答案 0 :(得分:0)
我能够使用jdweng的推荐来获得解决方案。这是修改后的代码:
Dim myWriter As StreamWriter = Nothing
Dim objRequest As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
objRequest.Method = "POST"
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.Flush()
myWriter.Close()
End Try