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

Angular 4向控制器Post动作传递整数ID失败求助

解决Angular 4调用REST接口时ID参数接收为0的问题

嘿,我来帮你搞定这个问题!你的代码出问题主要是请求方法不匹配、参数传递方式错误,还有路径里的小语法bug,下面一步步给你理顺:

先搞清楚核心问题

你控制器里的Delete(int id)是用来处理删除请求的,但你现在用了http.post去调用,而且参数传递的方式和控制器的绑定规则不匹配,导致ID始终是0(int类型的默认值)。另外你写的URL里还有多余的单引号',这也会导致路径错误哦。

推荐解决方案:符合REST规范的调用方式(优先选这个)

REST规范里删除资源应该用DELETE请求,而不是POST,所以我们调整Angular代码,同时确保控制器的路由配置正确:

1. 修正Angular的Delete请求代码

把原来的post改成delete,并把ID拼接到URL路径里:

// 注意去掉多余的单引号,把id直接拼在路径末尾
_this.http.delete(_this.appService.baseUrl + "api/ServiceEmp/" + id).subscribe(result => {
  // 这里处理删除成功后的逻辑
  console.log("删除成功", result);
});

2. 确保控制器的Delete方法路由配置正确

你的控制器类上应该已经有[Route("api/[controller]")]特性,然后给Delete(int id)方法加上[HttpDelete("{id}")]特性,这样URL里的ID会自动绑定到方法的参数上:

[Route("api/[controller]")]
[ApiController]
public class ServiceEmpController : ControllerBase
{
    // ...其他方法...

    [HttpDelete("{id}")] // 这里的{id}会匹配URL里的数值
    public IActionResult Delete(int id)
    {
        // 你的删除逻辑
        return Ok();
    }
}

特殊情况:如果必须用POST传递ID(不推荐,但给你备选方案)

如果因为某些限制必须用POST请求来传递ID,那需要调整控制器和Angular代码:

方案A:把ID作为查询参数传递

  1. 控制器新增一个Post方法专门处理这个请求:
[HttpPost("DeleteById")]
public IActionResult DeleteById(int id)
{
    // 你的删除逻辑
    return Ok();
}
  1. Angular代码调整为:
// 把id作为查询参数拼在URL后面
_this.http.post(_this.appService.baseUrl + "api/ServiceEmp/DeleteById?id=" + id, null).subscribe(result => {
    // 处理结果
});

方案B:把ID放在请求体里传递

  1. 控制器修改参数为[FromBody] int id:
[HttpPost("DeleteById")]
public IActionResult DeleteById([FromBody] int id)
{
    // 你的删除逻辑
    return Ok();
}
  1. Angular代码直接把id作为请求体发送:
_this.http.post(_this.appService.baseUrl + "api/ServiceEmp/DeleteById", id).subscribe(result => {
    // 处理结果
});

为什么原来的代码不行?

  • URL里的多余单引号'会导致请求路径错误,控制器无法匹配到正确的方法;
  • 你用POST请求调用,但控制器的Post方法是接收[FromBody] Model类型,你传的是单个整数ID,无法绑定到Model对象,所以参数默认是int的初始值0;
  • 若你本意是调用Delete(int id),却用了POST方法,不符合REST方法约定,而且Delete方法的ID参数是从URL路由获取,不是请求体,所以传了也接收不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:17:43