簡體   English   中英

將參數傳遞給API函數AngularJS C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM