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

使用Invoke-RestMethod调用含反斜杠的REST API URL报错

解决Invoke-RestMethod返回404未找到的问题

这个404错误大概率是URL编码重复导致的,我帮你拆解问题并给出解决办法:

首先看你用的URL:https://foo/accounts/thing%5CBSTNTZ-MTRFKR,其中%5C是反斜杠\的标准URL编码。但PowerShell的Invoke-RestMethod在处理字符串类型的-Uri参数时,会自动对特殊字符进行编码——这就导致已经编码过的%5C被再次编码成%255C,服务器收到的实际请求路径变成了/accounts/thing%255CBSTNTZ-MTRFKR,自然找不到对应的资源,返回404。

下面是几种可行的解决方式:

  • 方式一:使用未编码的原始路径,让PowerShell自动处理编码
    把URL里的%5C替换成实际的反斜杠\,直接传入-Uri参数即可,PowerShell会帮你正确完成URL编码:

    $url = 'https://foo/accounts/thing\BSTNTZ-MTRFKR'
    $request_content_type = 'application/xml'
    $response_checkout = Invoke-RestMethod `
     -Credential $credential `
     -Method Get `
     -Uri $url `
     -ContentType $request_content_type
    
  • 方式二:手动创建Uri对象避免重复编码
    如果你必须使用已编码好的URL字符串,可以先把它转换成[Uri]类型的对象,再传给-Uri参数,这样PowerShell就不会再次对其编码:

    $url = [Uri]::new('https://foo/accounts/thing%5CBSTNTZ-MTRFKR')
    $request_content_type = 'application/xml'
    $response_checkout = Invoke-RestMethod `
     -Credential $credential `
     -Method Get `
     -Uri $url `
     -ContentType $request_content_type
    
  • 额外的排查方向

    • 确认$credential对应的账号是否有访问该资源的权限:部分服务器会用404来隐藏权限不足的问题,而不是返回403
    • 直接在浏览器或者API测试工具里访问这个URL,验证资源本身是否存在,排除服务器端的问题
    • 检查-ContentType是否符合API要求:有些接口对Content-Type的校验很严格,传错可能导致返回404或其他错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:58:04