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

JavaScript fetch请求用字符串插值拼接URL时含#的参数传值为空

问题根因

这个错误和JavaScript关键字没有任何关系,是URL的固有语法规则导致的。
# 在URL标准中是片段标识符的起始标记,浏览器发起HTTP请求时,会自动把#以及它之后的所有内容从请求URL中移除,不会发送给后端服务。因此你传入的testabc#到服务端时只会剩下testabc,参数不完整自然会引发路由或参数校验错误。

修复方案

不要手动拼接URL查询参数,推荐两种标准的编码处理方式:

  • 方案1:使用encodeURIComponent单独编码每个参数值
    手动对每个参数值做URL编码,所有敏感特殊字符都会被转义为符合规范的格式,其中#会被转义为%23,后端收到后会自动解析回原始字符:
    const requestUrl = `/api/Controller/UpdatePassword?currentPassword=${encodeURIComponent(currentPassword.value)}&newPassword=${encodeURIComponent(newPassword.value)}&confirmPassword=${encodeURIComponent(confirmPassword.value)}`
    
  • 方案2:使用URLSearchParams构造参数(更推荐,无需手动处理编码)
    内置API会自动完成所有参数的编码工作,代码可读性更高,也不会出现遗漏编码的问题:
    const queryParams = new URLSearchParams({
      currentPassword: currentPassword.value,
      newPassword: newPassword.value,
      confirmPassword: confirmPassword.value
    })
    const requestUrl = `/api/Controller/UpdatePassword?${queryParams.toString()}`
    
常见性说明

这是前端开发中非常普遍的问题,几乎所有初学者在手动拼接URL参数时都遇到过同类问题。除#外,&、=、+、空格、中文等字符如果不做编码直接拼接,同样可能引发参数解析异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:24:02