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

Angular+ASP.NET项目DELETE、UPDATE请求无法正常调用问题求助

问题根因

你的问题集中在Angular服务的请求路径拼接错误和传参格式不符合HttpClient的规范两个点,具体修复步骤如下:

1. 修复SharedService中的请求方法

Angular HttpClient的delete方法第二个参数为请求配置项,不是请求体;put/delete请求需要将资源ID直接拼接在URL路径中,和你后端路由[HttpDelete("{id}")]的规则匹配。
修改后的服务代码如下:

import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class SharedService {
  readonly APIUrl = "https://localhost:44348"

  constructor(private http:HttpClient) { }

  getGameList():Observable<any[]>{
    return this.http.get<any>(this.APIUrl+'/Games');
  }

  addGame(val:any){
    return this.http.post(this.APIUrl+'/Games',val);
  }

  // 新增id参数,拼接到URL路径中,请求体传更新后的数据
  updateGame(id: number, val:any){
    return this.http.put(`${this.APIUrl}/Games/${id}`, val);
  }

  // 只接收id参数,拼接到URL路径中,delete不需要传请求体
  deleteGame(id: number){
    return this.http.delete(`${this.APIUrl}/Games/${id}`);
  }

  // 顺便修正按名称查询的方法,用HttpParams传查询参数
  getGamesByName(name: string){
    const params = new HttpParams().set('name', name);
    return this.http.get<any>(`${this.APIUrl}/Games`, { params });
  }
}

2. 修复组件中的方法调用

你现在调用deleteGame时传的是整个游戏对象,需要改为只传ID值:

deleteClick(item:any){
  // 改为传item.id
  this.service.deleteGame(item.id).subscribe(data => {
    alert('删除成功');
    this.refreshGameList();
  })
}

3. 补充更新操作的调用规范

编辑弹窗提交更新时,调用updateGame需要同时传入游戏ID和更新后的对象,示例如下:

// 编辑组件提交时的调用示例
submitUpdate(){
  this.service.updateGame(this.game.id, this.game).subscribe(res => {
    // 关闭弹窗、刷新列表逻辑
  })
}

修改完成后DELETE和PUT请求的路径就会自动拼接成你预期的https://localhost:44348/Games/{id}格式,和后端路由匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:06:03