2014-11-04 76 views
0

我有一個ASP.NET Web Api(1)控制器,具有GET,POST和DELETE操作。我從一個帶有$resource的Angular 1.2.0 RC3應用程序調用這個應用程序。我們稱之爲控制器Foos

我做一個GET返回FOOS的列表:

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 

在這裏我要說的讓我FOOS列表客戶端x和記錄ÿ

現在,我想從我收到的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的整個列表,這使得SENCE。

我的問題是,我如何使用Angular的$資源刪除單個foo而不在每個foo中獲取它自己的GET請求?

UPDATE:

我可以做一個GET /api/foo/1在資源是foo/fooId,它相當於DELETE /api/foo/1刪除它,但我想要得到的Foo的列表,而不是每個單獨FOO。

+0

http:// localhost:55386/api/foos/123456/1不是clientid = 123456而recordid = 1? – sylwester 2014-11-04 10:44:55

+0

@sylwester是的。 – 2014-11-04 10:46:46

+0

所以我有點困惑什麼是錯的? – sylwester 2014-11-04 10:47:48

回答

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