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

Angular如何在POST请求体中发送字符串及排查400响应错误

故障原因
  • JSON序列化不合法:你手动拼接JSON字符串\"${testHtml}\"的方式存在严重转义风险,HTML内容本身会包含大量双引号、换行符、特殊HTML实体,手动加的双引号会和HTML内部的双引号冲突,最终生成非法JSON格式,ASP.NET后端反序列化请求体失败直接返回400。
  • 单个字符串类型的[FromBody]绑定限制:ASP.NET对[FromBody]直接接收string类型的参数有严格规则,要求请求体必须是完全符合JSON规范的纯字符串值,任何格式偏差都会触发绑定失败。
修复方案

方案1(最小改动):使用标准JSON序列化替换手动拼接

直接调用JSON.stringify处理字符串,工具会自动完成所有特殊字符转义,生成合法JSON:

exportTestAsPdf(testHtml: string): Observable<any> {
    // 替换手动拼接逻辑,由JSON.stringify完成序列化
    return this.http.post<any>(this.baseTestApiUrl + "Print", JSON.stringify(testHtml), this.requestHeaders);
}

方案2(推荐,兼容性更高):用对象包裹参数

直接传单个字符串的绑定成功率低,改用对象包裹参数,前后端对应修改后基本不会出现绑定问题:

前端修改

exportTestAsPdf(testHtml: string): Observable<any> {
    // 传对象而非纯字符串
    return this.http.post<any>(this.baseTestApiUrl + "Print", { testHtml }, this.requestHeaders);
}

后端修改

新增对应接收的DTO类,调整接口参数:

// 新增请求DTO类
public class PrintRequest
{
    public string TestHtml { get; set; }
}

[HttpPost]
public IActionResult Print([FromBody] PrintRequest request)
{
    string testHtml = request.TestHtml;
    // 原有业务逻辑不变
}
排查辅助

如果修改后仍然返回400,可以打开浏览器控制台的「网络」面板,复制对应请求的Payload内容,用JSON校验工具检查格式是否合法,同时可以在后端接口处加断点查看模型绑定的错误详情,快速定位问题。


内容的提问来源于stack exchange,提问作者M. Akar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:06:01