API $http 删除 returns 405 在 angular 从工厂调用时

API $http delete returns 405 when calling from factory in angular

这是我工厂里的东西。当我使用来自控制器的常规 ajax 语法 运行 时,这工作正常。

function endAgentSession(sessionData, tokenData) {

            var sessionId = sessionData.data.sessionId,
                access_token = tokenData.access_token,
                baseURI = tokenData.resource_server_base_uri,
                endAgentSessionPayload = {
                    'sessionId': sessionId,
                    'forceLogOff': true,
                    'endContacts': true,
                    'ignorePersonalQueue': false
                    };

            console.log(sessionId, "sessID");


            return $http({
                'url': baseURI + 'services/v6.0/agent-sessions/' + sessionId,
                'type': 'DELETE',
                'headers': {
                    //Use access_token previously retrieved from inContact token service
                    'Authorization': 'bearer ' + access_token,
                    'content-Type': 'application/json'
                },
                'data': endAgentSessionPayload
            }).then(function(res){
               return res })};
        }

这是我的控制器。当我通过 ng-click 从控制器调用 endAgentSession 函数时,它会错误显示为 405..

 $scope.endAgentSession = function(){
    agentFactory.endAgentSession($scope.sessionData, $scope.tokenData);
};

我做错了什么?它在控制器中使用 ajax 工作,然后当我将它移到工厂并使用 promise 时似乎坏了。

它实际上显示它在网络中请求 GET 请求.. [![在此处输入图片描述][1]][1]

完全控制者:

csMgmtApp.controller('launchedController', ['$scope', '$http', '$document', '$resource', 'agentFactory', '$timeout', function ($scope, $http, $document, $resource, agentFactory, $timeout) {

$scope.agentStatePayload = {};
$scope.sessionData = {};
$scope.tokenData = {};
$scope.startSessionPayload = {
    'stationPhoneNumber': '2223222222',
    'inactivityTimeout': 0,
    'inactivityForceLogout': 'false'
};

$document.ready(function () {
    $scope.tokenData = agentFactory.getToken();
    console.log($scope.tokenData);
});

agentFactory.startSession($scope.startSessionPayload, $scope.tokenData).then(function(res){
    console.log("sessionId", res);
    $scope.sessionData = res;
});



$scope.endAgentSession = function(){
    agentFactory.endAgentSession($scope.sessionData, $scope.tokenData);
};


}]);

一切似乎都在工作,除了 endSession,现在..

你每次说我都应该猜到

regular ajax syntax from the controller

你的意思是你之前使用过 jQuery $.ajax

不同的是Angular的$http中设置请求方法的属性是method,不是type.

您可以使用

进一步简化它
return $http.delete(baseURI + 'services/v6.0/agent-sessions/' + sessionId, {
    headers: {
        Authorization: 'Bearer ' + access_token,
    },
    data: endAgentSessionPayload
});