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

Azure Function中Invoke-RestMethod含德语特殊字符时调用失败求助

解决Linux环境下PowerShell Azure函数调用DevOps Pipeline时德语特殊字符导致的请求体损坏问题

问题根源

手动拼接JSON字符串时,德语特殊字符(Ü、Ö、Ä等)的转义或编码处理不符合JSON规范,加上Linux环境下PowerShell的字符串编码差异,导致服务端无法正确解析请求体,抛出runParameters为空的异常。

解决方案:避免手动拼接JSON,使用ConvertTo-Json生成标准JSON

手动拼接JSON极易出现格式错误和编码问题,改用PowerShell的对象序列化功能生成JSON,能自动处理特殊字符转义和UTF-8编码。

修改后的代码示例:

# 初始化请求头
$headers = [System.Collections.Generic.Dictionary[string,string]]::new()
$headers.Add("Content-Type", "application/json; charset=utf-8")
$headers.Add("Authorization", "Basic $secret")

# 构造请求体对应的对象(而非手动拼接字符串)
$requestBody = [PSCustomObject]@{
    templateParameters = [PSCustomObject]@{
        items = $items
    }
}

# 将对象序列化为标准JSON,-Depth确保嵌套结构被正确序列化
$body = $requestBody | ConvertTo-Json -Depth 10

# 发起请求
$response = Invoke-RestMethod 'https://dev.azure.com/<repos>/<project>/_apis/pipelines/1/runs?api-version=7.0' -Method 'POST' -Headers $headers -Body $body

额外优化:直接传递UTF-8编码的字节数组

如果仍存在编码问题,可以将JSON字符串转换为UTF-8字节数组后传递,彻底避免编码转换差异:

$bodyBytes = [System.Text.Encoding]::UTF8.GetBytes($body)
$response = Invoke-RestMethod 'https://dev.azure.com/<repos>/<project>/_apis/pipelines/1/runs?api-version=7.0' -Method 'POST' -Headers $headers -Body $bodyBytes -ContentType 'application/json; charset=utf-8'

关键说明

  • ConvertTo-Json会严格按照JSON规范处理特殊字符、嵌套结构,确保服务端能正确解析请求体。
  • 手动拼接JSON时,即使Write-Host显示字符正确,也可能存在不可见的格式错误或编码问题,导致服务端解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:50:46