使用Angular $http.delete发送带有请求体的请求

4
在我的Angular应用程序中,我需要发送一个$http.delete请求到这个路由/projects/:id/activityTypes(注意它不以活动类型id结尾),并传递以下格式的主体:
[{"id": 2}]

这是为了允许通过发送数组中的多个对象来进行批量删除操作。
使用Rest Web Service Client测试上述路由,我获得了200, OK状态,因此该路由已经实现并正常工作,我只需要在我的Angular应用程序中实现它。
现在,我检查了这篇先前的帖子,其中有一个非常类似的问题,并且学到了Angular的$http.delete默认不会在请求中发送主体,但是:

[它]确实允许我们提供一个配置对象作为第二个参数, 通过它我们可以访问'data'属性。

所以我尝试了建议的方法并在我的请求中发送了一个配置对象:
return $http.delete('projects/' + projectID + '/activityTypes', {data: [{id: 2}]})

然而,它并没有起作用。似乎尽管我发送了这个配置对象,但仍然没有发送正文。
我该如何实际传递一个正文到我的 $http.delete 路由?
编辑:当我发送上述 $http.delete 请求时,服务器记录了以下内容:

enter image description here

数据似乎已经被发送,但是我得到了这个控制台错误,当使用Rest Client时我没有得到这个错误:
Object {data: "Json not valid to remove activity type from Project", status: 400, config: Object, statusText: "Bad Request"}

最好使用 $http.post 来调用这个批量删除路由并在那里传递你的数据,这样会更容易些。 - Ignacy Kasperowicz
我可以在一篇帖子中发送删除请求吗? - Tiago
@charlietfl 我也不确定,我应该将其编辑掉。所以这是一个服务器端解析问题?但是当我使用我的Rest客户端进行测试时,为什么它会返回200呢? - Tiago
我明白这一点,但如果我的Rest Client返回200,而实际使用应用程序时返回400,那么这一定意味着我的代码有问题,对吗?我一定是发送了格式不正确的JSON。我传递的配置对象的数据键是否附加到请求正文中? - Tiago
取决于你的REST API设置,我们无法从Angular或任何其他客户端代码中得知。 - charlietfl
显示剩余4条评论
2个回答

6

试试这个:

$http({
            method: 'DELETE',
            url: 'projects/' + projectID + '/activityTypes',
            data: [{id: 2}]},
            headers: {
                'Content-type': 'application/json;charset=utf-8'
            });

2
@Renato的方法是可行的,但稍加调整后,$http.delete(...)方法也可以使用。通过在请求选项中包含data元素,您可以将数据传递给服务器,并在开发者控制台中确认此操作。但是,如果没有适当的Content-Type,您的服务器可能会忽略它。
下面的代码应该可以正常工作:
return $http.delete('projects/' + projectID + '/activityTypes', {data: [{id: 2}], headers: {'Content-Type': 'application/json;charset=utf-8'}})

感谢@Harshit Anand在另一个SO帖子上的贡献


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接