[英]Pass argument to API function AngularJS C#
所以我有一個看起來像這樣的Web API函數
[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'
}
}
})
};
});
這里有幾件事...
您的數據服務應將內容類型發送到您的資源:
saveAccount: $resource('/api/Account/Save', {}, { query: { method: 'PUT', headers: { 'Content-Type': 'application/json' } } })
您的應用程序服務應將參數發送到數據服務:
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
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.