AngularJS $资源DELETE集合中的项目

时间:2014-11-04 10:41:17

标签: angularjs rest asp.net-web-api angularjs-resource

我有一个带有GET,POST和DELETE操作的ASP.NET Web Api(1)控制器。我从一个带有$resource的Angular 1.2.0 RC3应用程序中调用它。让我们调用控制器Foos

我做了一个返回foos列表的GET:

GET http://localhost:55386/api/foos/123456/1 HTTP/1.1
Host: localhost:55386
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,es;q=0.6

资源在哪里

/api/foos/clientId/recordId

我在这里说给我一个客户x的foos列表并记录y

现在,我想从我收到的foos列表中删除一个foo,所以我打电话给$delete

$scope.delete = function(foo){
    foo.$delete();
}

然而,这导致以下请求:

DELETE http://localhost:55386/api/foos/123456/1 HTTP/1.1
Host: localhost:55386
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,es;q=0.6

这个删除显然是试图删除整个foos列表,这样就可以了。

我的问题是,如何使用Angular的$资源删除单个foo而不会在自己的GET请求中获取每个foo?

更新:

我可以执行资源为GET /api/foo/1的{​​{1}}及其等效foo/fooId来删除它,但我希望单独获取foos列表而不是每个foo。

2 个答案:

答案 0 :(得分:1)

我知道这不是问题,但你应该重新https://github.com/mgonto/restangular。与休息服务交互更容易

答案 1 :(得分:0)

我误解了$ resource是如何运作的。我认为foo知道如何删除自己,因为它是Resource'实例'在以下功能中:

$scope.delete = function(foo){
    foo.$delete();
}

正确的方法是:

$scope.delete = function(foo){
    Api.delete({ 
        id: foo.Id, 
        clientId : $scope.clientId, 
        recordId : $scope.recordId 
    });
}

您必须手动告诉$resource实例使用foo的id,以便url包含foo id并执行以下DELETE

DELETE http://localhost:55386/api/foos/123456/1/123 HTTP/1.1

其中123是fooId