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

Postman form-data转PowerShell调用API遇Unsupported_Media_Type错误求助

排查PowerShell调用API报Unsupported_Media_Type的建议

我有一个API在Postman中以form-data类型的Body上传JSON文件可正常运行,但在PowerShell中调用该API时,持续出现Unsupported_Media_Type错误。以下是执行的PowerShell代码:

$multipartContent = [System.Net.Http.MultipartFormDataContent]::new()
$multipartFile = "C:\Temp\myFile.json"
$FileStream = [System.IO.FileStream]::new($multipartFile, [System.IO.FileMode]::Open)
$fileHeader = [System.Net.Http.Headers.ContentDispositionHeaderValue]::new("form-data")
$fileHeader.Name = "myFile"
$fileHeader.FileName = "myFile.json"
$fileContent = [System.Net.Http.StreamContent]::new($FileStream)
$fileContent.Headers.ContentDisposition = $fileHeader
$fileContent.Headers.ContentType = [System.Net.Http.Headers.MediaTypeHeaderValue]::new("application/json")
$multipartContent.Add($fileContent)
  • 复用Postman的multipart边界值
    Postman会自动生成标准的multipart边界,部分API对边界格式有严格要求。你可以从Postman请求头的Content-Type中提取边界值(比如----WebKitFormBoundary7MA4YWxkTrZu0gW),显式指定给MultipartFormDataContent:
$boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"
$multipartContent = [System.Net.Http.MultipartFormDataContent]::new($boundary)
  • 修正Content-Disposition的参数格式
    部分API要求Name和FileName必须用引号包裹,修改代码中的对应部分:
$fileHeader.Name = '"myFile"'
$fileHeader.FileName = '"myFile.json"'
  • 避免手动覆盖Content-Type头
    调用Invoke-RestMethod时,不要手动设置-ContentType参数,MultipartFormDataContent会自动生成包含边界的正确Content-Type。手动设置会丢失边界信息,导致媒体类型不被识别。

  • 改用ByteArrayContent替代StreamContent
    文件流可能存在读取不完整或未正确关闭的问题,换成字节数组形式传递文件:

$fileBytes = [System.IO.File]::ReadAllBytes($multipartFile)
$fileContent = [System.Net.Http.ByteArrayContent]::new($fileBytes)
# 后续Header设置保持不变
  • 对比Postman与PowerShell的请求详情
    用抓包工具(如Fiddler)捕获两者的请求,重点对比:
    • Content-Type头是否完全一致(包括边界参数)
    • form-data各部分的头信息是否匹配
    • 文件内容是否完整发送

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:17:12