我试图使用角度2调用MVC Web API。我的端点看起来像这样:
[HttpDelete]
[Route("DeleteMe")]
public ActionResult DeleteItems([FromQuery] string objectId, [FromBody] int[] toDelete) {
//logic
}
我可以使用邮递员测试这个,我使用内容类型' application / json'来设置正文,并输入以下数据。
[1,2,3]
这很好用。但是我无法使用角度2重新创建此调用。我使用HttpClient进行调用,并且代码类似于此:
public callDeleteItems(objId: number, toDelete: number[]) {
var serviceEndpoint = "endpoint here?objectId=" + objId;
const params = new HttpParams().set("toDelete", JSON.stringify(toDelete));
this.http.request('delete', serviceEndpoint, {
params: params
}).subscribe();
}
答案 0 :(得分:0)
您必须使用URLSearchParams
生成您的网址
public getURL(objId: number, toDelete: number[]): string {
const urlParams: URLSearchParams = new URLSearchParams();
urlParams.set('objectId', objId.toString());
toDelete.forEach(n => urlParams.append('toDelete', n.toString()));
return '/endpoint?' + urlParams.toString();
}
当您必须发送数组时,您必须使用append
方法
示例:
this.getURL(12, [1, 2, 3]);
将生成网址
/endpoint?objectId=12&toDelete=1&toDelete=2&toDelete=3
您的网络API控制器操作应为
[HttpDelete]
[Route("DeleteMe")]
public ActionResult DeleteItems([FromUri] string objectId, [FromUri] int[] toDelete) {
//logic
}