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

Angular客户端传Boolean值到C#控制器始终为false的问题

解决Angular向C#后端传递Boolean值始终为false的问题

问题原因

你在Angular组件里用new Boolean(event.target.checked)创建了Boolean包装对象,而非JavaScript原始布尔值(true/false)。当Angular的HttpClient发送请求时,会把这个对象序列化为JSON结构(比如{"value": true}),而C#后端控制器的参数是单个Boolean类型,ASP.NET Core无法将JSON对象映射到单个布尔参数,因此会使用默认值false。

解决方案

直接传递JavaScript原始布尔值,摒弃new Boolean()构造函数:

修改Angular组件代码

把new Boolean(event.target.checked)替换为event.target.checked(它本身就是原始布尔值):

public onChangeHandler(event: any, tr: any) {
    this.accountService.setAutoEmail(event.target.checked)
        .pipe(first())
        .subscribe({
            next: (autoEmail: any) => {
                this.autoEmail = autoEmail;
            },
            complete: () => {
                //this.alertService.info("Done");
            },
            error: error => {
                this.alertService.error(error);
            }
        });
}

可选:用模型类接收参数(适配复杂场景)

如果后续需要传递更复杂的数据,可以定义C#模型类来接收请求体:

public class AutoEmailRequest
{
    public bool AutoEmail { get; set; }
}

[HttpPut("auto-email")]
public ActionResult<bool> SetAutoEmail([FromBody] AutoEmailRequest request)
{
    return Ok(_accountService.SetAutoEmail(request.AutoEmail));
}

同时调整Angular服务的请求体格式:

setAutoEmail(autoEmail: boolean) {
    return this.http.put<boolean>(`${baseUrl}/auto-email`, { autoEmail });
}

验证效果

修改后,浏览器Network面板的Payload会显示原始的true或false(而非JSON对象),后端就能正确接收到对应的布尔值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:23:21