2016-06-14 2 views
1

У меня есть angularJS приложения с API службы определяется следующим образом:

(function() 
{ 
    'use strict'; 

    angular 
     .module('myApp') 
     .factory('api', apiService); 

    /** @ngInject */ 
    function apiService($resource) 
    { 
     var api = {}; 

     // Base Url 
     api.baseUrl = 'http://localhost:37243/'; 

     api.Auth = $resource(api.baseUrl + 'auth/:verb', {}, { 
      login: { 
       method: "POST", 
       params: { 
        verb: 'credentials' 
       } 
      }, 
      logout: { 
       method: "GET", 
       params: { verb: 'logout' } 
      }, 
      getSession: { 
       method: "GET", 
       params: { verb: 'session' } 
      } 
     }); 

     return api; 
    } 

})(); 

, и я уверен, выполнение метода входа от службы Auth, как это:

authService.login = function (user, success, error) { 
     var apiAuth = new api.Auth(); 

      apiAuth.$login(user).then(
       function (response) { 
        var loginData = response; 
        authService.getSession(); 

        $rootScope.$broadcast(AUTH_EVENTS.loginSuccess); 
        success(loginData); 
       }, function (response) { 
        $rootScope.$broadcast(AUTH_EVENTS.loginFailed); 
        error(response); 
       }); 
     }; 

Выполняется вызов api, но он передает полезную нагрузку в строке запроса, а не в полезную нагрузку данных. Я думаю, что у меня есть ресурс, настроенный неправильно, но не могу понять почему.

Что посылается:

http://localhost:37243/auth/credentials?password=Password1&username=admin

То, что я хочу быть отправлено:

POST http://localhost:37243/auth/credentials {пароль: 'Password1', имя пользователя: 'админ' }

Любые идеи?

+0

попробуйте заменить глагол параметров от входа ресурса – Erez

+0

@Erez Я не уверен на 100%, что вы имеете в виду, но я попытался переопределить URL-адрес, чтобы не иметь параметра: verb и удалил объект param из метода override без какой-либо радости ...? – Drammy

+0

Логин: { метод: "POST", Титулы: { КЛРД: 'Полномочия' } }, – Erez

ответ

0

Я разработал вопрос ...

Причина в том, что я инстанцировании объект ресурса идентификации и последующего выполнения метода.

Из документации ngResource, метод подписи для "не-GET" методы (как у меня), являются:

не-ГЭТ "класса" действия: Resource.action ([параметры], PostData, [успех], [ошибка])

не-GET экземпляра действия:. экземпляр $ действие ([параметры], [успех], [ошибка])

Так я бегу под вторым обстоятельством, где нет параметра postData.

Изменение моего кода не экземпляр объекта, как показано ниже, работал:

//the login function 
    authService.login = function(user, success, error) { 
     api.Auth.login(null, user).then(
      function(response) { 
       var loginData = response; 
       authService.getSession(); 

       $rootScope.$broadcast(AUTH_EVENTS.loginSuccess); 
       success(loginData); 
      }, function(response) { 
       $rootScope.$broadcast(AUTH_EVENTS.loginFailed); 
       error(response); 
      }); 
    }; 

Для получения дополнительной информации см this SO answer (до-голосование)