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
相关产品推荐
相关产品推荐

