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

ASP.NET MVC 5中如何传递含&的参数到Post动作方法?

问题解答

问题原因

这是参数编码不规范导致的问题,和代码、测试插件本身无关。application/x-www-form-urlencoded格式的核心规则是用&作为参数分隔符、=作为键值分隔符,所以参数值里的&等特殊字符必须经过URL编码,否则会被ASP.NET的参数解析器误判为新参数的分隔符,导致参数值被截断。

解决方法

1. 测试阶段临时处理

在FireFox RESTClient中,直接将参数值里的特殊字符替换为对应的URL编码:

  • 把&替换为%26
  • 例:用户名是user&name,传递时写为username=user%26name

2. 代码层面规范优化(可选)

如果需要更健壮的参数接收方式,可以定义实体类并通过[FromBody]绑定,这种方式更适合复杂参数场景,同时也能避免单个参数解析的歧义:

// 定义参数实体类
public class LoginRequest
{
    public string Username { get; set; }
    public string Password { get; set; }
}

// 修改Action方法
[HttpPost]
public ActionResult UserInfo([FromBody] LoginRequest request)
{
    // 后续业务逻辑处理
}

注意:即使改用实体类接收,调用方仍然需要对参数值做URL编码,这是application/x-www-form-urlencoded格式的强制要求。

外部调用的技术规范要求

在接口文档中必须明确以下编码规则:

  • 参数编码标准:所有参数的键和值都必须遵循RFC 3986规范进行URL编码
  • 特殊字符编码映射:
    • & → %26
    • = → %3D
    • + → %2B(因为+在该格式中默认代表空格)
    • 空格 → %20 或 +
  • 请求格式要求:
    • 请求头必须设置Content-Type: application/x-www-form-urlencoded
    • 参数拼接格式为username=编码后的值&password=编码后的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:10:58