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作为查询参数传递
- 控制器新增一个Post方法专门处理这个请求:
[HttpPost("DeleteById")] public IActionResult DeleteById(int id) { // 你的删除逻辑 return Ok(); }
- Angular代码调整为:
// 把id作为查询参数拼在URL后面 _this.http.post(_this.appService.baseUrl + "api/ServiceEmp/DeleteById?id=" + id, null).subscribe(result => { // 处理结果 });
方案B:把ID放在请求体里传递
- 控制器修改参数为
[FromBody] int id:
[HttpPost("DeleteById")] public IActionResult DeleteById([FromBody] int id) { // 你的删除逻辑 return Ok(); }
- 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
相关产品推荐
相关产品推荐

