【问题标题】:Closing Stream Error Message UTF 8 Encoding?关闭流错误消息 UTF 8 编码?
【发布时间】: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()

标签: c# asp.net .net vb.net


【解决方案1】:

我能够使用 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

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多