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

VB.NET HttpClient发送MultipartFormData与Python格式对齐问题

解决VB.NET HttpClient发送multipart/form-data文件上传格式问题

使用VB.NET的HttpClient发送multipart/form-data请求时,生成的请求格式不符合服务器要求。当前代码将file字段的文件名、Content-Type和文件内容混在一个字符串中传递,而Python发送的有效请求里,file字段是独立的文件项,包含正确的Content-Disposition头和文件内容。需要调整VB代码的payload结构,让请求格式与Python版本一致。

原错误VB代码

Dim Myurl As String = "http://" & "192.168.33.136/job"
Dim client = New HttpClient()
Dim FormData = New MultipartFormDataContent()
Dim payloadData = New Dictionary(Of String, String)()
payloadData.Add("key", FabMoKey)
payloadData.Add("index", "0")
payloadData.Add("file", "filename=" & Chr(34) & "Fred.sbp" & Chr(34) & "
Content-Type:Text/plain  mx,10 
 mx,0 
")

For Each payloadItem In payloadData
    FormData.Add(New StringContent(payloadItem.Value), payloadItem.Key)
Next


Dim request = New HttpRequestMessage(HttpMethod.Post, Myurl)
request.Headers.Add("accept", "application/json")
request.Content = FormData
Dim response = Await client.SendAsync(request)

服务器接收的请求对比

有效请求(Python发送)

Boundary: \r\n------WebKitFormBoundarya0nvAqIq8dCKaGRy\r\n
Encapsulated multipart part:  (text/plain)
    Content-Disposition: form-data; name="file"; filename="blob"\r\n
    Content-Type: text/plain\r\n\r\n
    Line-based text data: text/plain (2 lines)
        MX, 10\n
        MX, 0
Last boundary: \r\n------WebKitFormBoundarya0nvAqIq8dCKaGRy--\r\n

无效请求(VB代码发送)

Boundary: \r\n--0e39c991-6b94-41f2-9cd0-933a79a3886b\r\n
Encapsulated multipart part:  (text/plain)
Content-Disposition: form-data; name=file\r\n\r\n
    Content-Type: text/plain; charset=utf-8\r\n
    Line-based text data: text/plain (1 lines)
        filename="Fred.txt"\r\n Content-Type: Text/plain \r\n\r\n mx,10 \n mx,0 \r\n
Last boundary: \r\n--0e39c991-6b94-41f2-9cd0-933a79a3886b--\r\n

修正后的VB代码

Dim Myurl As String = "http://192.168.33.136/job"
Dim client = New HttpClient()
Dim FormData = New MultipartFormDataContent()

' 添加普通文本字段
FormData.Add(New StringContent(FabMoKey), "key")
FormData.Add(New StringContent("0"), "index")

' 构造文件内容并设置正确的请求头
Dim fileContent = New StringContent("mx,10" & vbCrLf & "mx,0")
' 设置文件的Content-Type
fileContent.Headers.ContentType = New System.Net.Http.Headers.MediaTypeHeaderValue("text/plain")
' 将文件内容添加到表单,同时指定字段名和文件名
FormData.Add(fileContent, "file", "Fred.sbp")

Dim request = New HttpRequestMessage(HttpMethod.Post, Myurl)
request.Headers.Add("accept", "application/json")
request.Content = FormData
Dim response = Await client.SendAsync(request)

修正说明

  • 普通字段直接使用StringContent添加即可,无需额外处理
  • 文件字段需单独构造内容,明确设置Content-Type为text/plain
  • 使用MultipartFormDataContent.Add(content, name, fileName)重载,HttpClient会自动生成包含name="file"; filename="Fred.sbp"的Content-Disposition头,与Python请求格式一致
  • 避免将文件名、Content-Type和文件内容混为一个字符串作为普通字段值传递

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:07:40