API$http delete从angular中的工厂调用时返回405

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

本文关键字:调用 工厂 返回 http delete angular API      更新时间:2023-09-26

这就是我工厂里的产品。当我在控制器上以常规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调用endAgentSession函数时,它会错误地返回405.

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

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

它实际上显示它在网络中请求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);
};

}]);

除了最后一次会议,一切似乎都在起作用。。

我应该猜到,每次你说

来自控制器的常规ajax语法

您的意思是您以前使用的是jQuery $.ajax

不同之处在于,在Angular的$http中设置请求方法的属性是method,而不是type

您可以使用进一步简化它

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