使用RestApi向Azure DevOps Repo添加含反斜杠文件失败求助
解决Azure DevOps Git Pushes API因反斜杠导致的400错误及PowerShell JSON转义问题
你的问题根源在于手动处理JSON转义时只覆盖了双引号,漏掉了反斜杠本身的转义——AssemblyInfo.cs里的反斜杠会破坏JSON结构,导致API返回400格式错误。另外原代码的循环处理逻辑也有问题:用-Raw读取的文件是单个字符串,foreach遍历会把它拆成单个字符处理,完全没必要。
直接用PowerShell内置的ConvertTo-Json处理内容转义,它会自动覆盖所有JSON规范要求的转义场景(包括反斜杠、双引号、换行符等),彻底避免手动转义遗漏的问题。修改后的函数如下:
function GetJSContentCS { param ( [string]$filepath ) # 读取完整文件内容,保留原始换行符 $content = Get-Content -Encoding UTF8 -Raw -Path $filepath # 自动处理所有JSON转义,-Compress避免额外换行 $jsonEscapedContent = $content | ConvertTo-Json -Compress # 移除ConvertTo-Json自动添加的首尾双引号,得到纯转义后的字符串 return $jsonEscapedContent -replace '^"|"$', '' } GetJSContentCS -filepath 'C:\temp\AssemblyInfo (2).cs'
关键说明:
ConvertTo-Json是PowerShell原生的JSON合规处理工具,能精准处理所有需要转义的字符,比手动替换可靠得多。- 原代码里的
-replace "(?s)rn\s*$"可以删除,ConvertTo-Json会自动处理末尾空白换行,保留原始内容的换行符更准确。
内容的提问来源于stack exchange,提问作者galsi
相关产品推荐
相关产品推荐

