You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

REST POST请求接收PDF文件不完整及代码警告问题求助

解决方案

针对你遇到的两个问题,以下是修改后的代码及详细说明:

修改后的完整代码

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim a As New AppBehaviour With {
        .DEALER_ALWAYS_SAVE_DHP_XML_PDF_EXPORT_BIT = 4,
        .XML_EXPORT_XML_FORMAT = "UTF8",
        .DONOT_CREATE_NEW_CLOUDID = 1,
        .XML_EXPORT_INCLUDING_MANU_CUSTNR = 1
    }
    Dim c As New Root With {
        .customerNo = "12345",
        .pass = "67890",
        .cloudId = "abcdef",
        .returnAsFile = True,
        .wawiManufacturer = "",
        .appBehaviour = a
    }
    Dim restUrl As String = "https://adresse.net"
    
    ' 若按钮频繁点击,建议将HttpClient声明为类级静态变量,避免重复创建连接
    Using client As New Net.Http.HttpClient()
        Dim jsonData As String = JsonConvert.SerializeObject(c)
        Dim content As New StringContent(jsonData, System.Text.Encoding.UTF8, "application/json")
        
        Try
            Dim response As Net.Http.HttpResponseMessage = Await client.PostAsync(restUrl, content)
            ' 强制检查请求是否成功,失败时抛出明确异常
            response.EnsureSuccessStatusCode()
            
            ' 异步读取完整响应流并写入文件
            Using outputStream As Stream = File.Create("D:\test.pdf")
                Await response.Content.CopyToAsync(outputStream)
            End Using
            
            MessageBox.Show("文件已成功接收")
        Catch ex As Net.Http.HttpRequestException
            MessageBox.Show("请求错误: " & ex.Message)
        Catch ex As IOException
            MessageBox.Show("文件写入错误: " & ex.Message)
        Catch ex As Exception
            MessageBox.Show("未知错误: " & ex.Message)
        End Try
    End Using
End Sub

问题修复说明

1. 消除代码警告

  • 替换WebRequest为HttpClient:原代码创建了HttpClient却未使用,改用HttpClient.PostAsync实现符合.NET推荐标准的异步HTTP请求,解决"建议使用HttpClient替代WebRequest"的警告。
  • 添加Await关键字:对所有异步方法(PostAsync、CopyToAsync)添加Await,确保异步操作正确执行,消除"缺失Await关键字"的警告。
  • 优化HttpClient生命周期:用Using语句管理HttpClient实例(若按钮频繁触发,建议将HttpClient声明为类级静态变量,避免重复创建连接导致的Socket资源耗尽)。

2. 修复PDF文件不完整问题

  • 使用异步流拷贝:原代码的input.CopyTo(output)是同步读取流,可能因网络波动或流读取不完整导致文件缺失;改用Await response.Content.CopyToAsync(outputStream),异步且可靠地读取全部响应内容。
  • 改用File.Create创建文件:File.Create会确保文件从起始位置写入(覆盖现有文件或创建新文件),避免因文件已有内容导致的写入偏移问题。
  • 添加响应状态校验:通过response.EnsureSuccessStatusCode()在请求返回4xx/5xx状态码时抛出明确异常,便于排查服务器端错误导致的文件异常。

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:37:50