2015-11-18 4 views
0

Так у меня есть функция Web API, который выглядит как этотPass аргумент API функции AngularJS C#

[Route("api/Account/Save")] 
[HttpPut] 
public IHttpActionResult SaveAccount(Account acc) 
{ 

    if (acc.AccountID != null) 
    { 
      // do stuff 
      var result = new {}; 
    } 
    return Ok(result); 
} 

Когда я иду к этой api/Account/Save конечной точки, мне нужно сохранить экземпляр Account класса в базу данных. В пользовательском интерфейсе веб-страницы должен быть введен пользователь, например ID, Name, ...

У меня возникла проблема с передачей экземпляра класса методу. Я знаю, как передать что-то вроде строки через конечную точку, а затем в функцию, но я не знаю, как это сделать.

Это мой AngularJS. Я помещал их в отдельные JS-файлы, поэтому я много раз заявляю об этом.

angular.module('MyApp') 
.factory('accountResource', function ($resource) { 
    return { 
     saveAccount: $resource('/api/Account/Save', {}, { 
      query: { 
       method: 'PUT', 
       params: { 
        // probably pass it here? 
        // I pass stuff like ID's to the function here 
       } 
      } 
     }) 
    }; 
}); 

angular.module('MyApp') 
.factory('accountFactory', ['$q', 'accountResource', function ($q, accountResource) { 
    var service = { 
     saveAccount: saveAccount, 
     account: {} 
    } 
    function saveAccount(account) { 
     return accountResource.saveAccount.query().$promise.then(
     function (result) { 
      service.account = result.account; 

      return result.$promise; 
     }, function (error) { 
      return $q.reject(error); 
     }); 
    } 
    return service; 
}]); 

Когда я запускаю отладчик и перерыв на этой линии в acccountFactory

return accountResource.saveAccount.query().$promise.then(

Параметр account действительно есть все атрибуты (ID, account, ...), и я вижу значения, введенные пользователем, назначаются им. Я просто не знаю, как передать это функции API. И если я изменю свой $resource вот так и пройду account до query, это не сработает (оно работает только тогда, когда я передаю вещи, подобные ID). Потому что я передаю в объект, то URL выглядит следующим образом:

/api/Account/Save/%5Bobject%20Object%5D 

angular.module('MyApp') 
    .factory('accountResource', function ($resource) { 
     return { 
      saveAccount: $resource('/api/Account/Save/:acc', {}, { 
       query: { 
        method: 'PUT', 
        params: { 
         acc: '@acc' 
        } 
       } 
      }) 
     }; 
    }); 

ответ

1

Есть несколько вещей, которые здесь ...

Ваша служба данных должна иметь тип содержимого отправляется на свой ресурс:

saveAccount: $resource('/api/Account/Save', {}, { query: { method: 'PUT', headers: { 'Content-Type': 'application/json' } } }) 

Ваша служба приложения должны иметь PARAMS направляются на службу данных:

saveAccount: function (params) { 
    return $q(function (resolve, reject) { 
     accountResource.saveAccount.query(params, function (data) { 
      resolve(data); 
     }, function (error) { 
      reject(error); 
     }); 
    }); 
} 

И ваш контроллер должен строить объект на основе полей формы и передавать этот объект в формате json-форматированного объекта:

saveAccount = function() { 
    var account = {}; 
    account.firstName = someValue; // probably a property bound to the textbox 
    account.lastName = someValue2; // so on etc... 

    var params = JSON.stringify(account); 
    accountResource.saveAccount(params).then(function (data) { 
     // do something with data 
    }); 
} 
Смежные вопросы