【问题标题】:Passing an object via AJAX to an API MVC C#通过 AJAX 将对象传递给 API MVC C#
【发布时间】:2018-02-09 10:23:58
【问题描述】:

我正在尝试将一个对象传递给我的 API,但它一直在 API 中将该对象显示为 NULL。

我的 Ajax 调用:

$.ajax({
   type: "GET",
   url: url,
   data: tranData,
   dataType: "json",
   success: function(response){
   var itemcount = response.itemsCount;
   var dataReturned = response.data;
}});

我的 API 方法:

[HttpGet]
        [Route("Api/ReportApi/SummaryReport")]
        public IHttpActionResult SummaryReport(JObject tranData)
        {     

            dynamic oData = tranData;
            BankTransactionsViewModelResults transactions = new BankTransactionsViewModelResults();

            transactions = oData;

            var summarisedTransactions = SummariseResults(transactions.BankTransactionsViewModelList, "Test Ref");

            var response = new
            {
                data = summarisedTransactions,
                itemsCount = summarisedTransactions.Count(),
            };

            return Request.GetOKRequest(response);
        }

我试图传递的对象:

[{"id":16,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"DEPOSIT","reference":"TEST10a","description":"TEST10d","amount":600000.0,"balance":600000.0,"tranDate":1494374400000},

{"id":17,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"WITHDRAWAL","reference":"TEST10b","description":"TEST10d","amount":-400000.0,"balance":200000.0,"tranDate":1494460800000},

{"id":18,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"DEPOSIT","reference":"TEST10c","description":"TEST10c","amount":700000.0,"balance":900000.0,"tranDate":1494547200000},

{"id":19,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"TRANSFER","reference":"TEST10d","description":"TEST10d","amount":-600000.0,"balance":300000.0,"tranDate":1494633600000},

{"id":20,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"DEPOSIT","reference":"TEST10e","description":"TEST10e","amount":800000.0,"balance":1100000.0,"tranDate":1494720000000},

{"id":21,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"WITHDRAWAL","reference":"TEST10f","description":"TEST10f","amount":-800000.0,"balance":300000.0,"tranDate":1494806400000},

{"id":22,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"DEPOSIT","reference":"TEST10g","description":"TEST10g","amount":900000.0,"balance":1.2E7,"tranDate":1494892800000},

{"id":23,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"TRANSFER","reference":"TEST10h","description":"TEST10h","amount":-400000.0,"balance":800000.0,"tranDate":1494979200000},

{"id":24,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"DEPOSIT","reference":"TEST10i","description":"TEST10i","amount":800000.0,"balance":1.6E7,"tranDate":1495065600000},

{"id":25,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"TRANSFER","reference":"TEST10j","description":"TEST10j","amount":-800000.0,"balance":800000.0,"tranDate":1495152000000},

{"id":26,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"DEPOSIT","reference":"TEST10k","description":"TEST10k","amount":900000.0,"balance":1.7E7,"tranDate":1495238400000},

{"id":27,"accountId":11111000010,"clientId":1,"agentId":1,"tranType":"WITHDRAWAL","reference":"TEST10l","description":"TEST10l","amount":-700000.1,"balance":0.0,"tranDate":1495324800000}]

如何将其传递给我的 API? tranData 显示为 null 但在发送之前我可以看到数据在那里......?我从外部 API 调用中获取这些数据并从响应中获取:

var tranData = JSON.parse(req.response);

【问题讨论】:

标签: c# ajax asp.net-mvc api


【解决方案1】:

首先创建一个类 id,accountId,clientId,agentId 等等你传递的内容

接下来创建类的对象

[HttpGet]
    [Route("Api/ReportApi/SummaryReport")]
    public IHttpActionResult SummaryReport(Class classobj)
    { your code here  }

在ajax之后 你需要发送json数据格式

like tranData{{"id":16,"accountId":11111000010,"clientId":1 like so on}

【讨论】:

    【解决方案2】:

    如果你想使用HttpGet 来完成请求,你将不得不使用严格类型的对象,就像StackOverflow question 中提到的那样。您可以将您的方法签名更改为以下内容

    [HttpGet]
    [Route("Api/ReportApi/SummaryReport")]
    public IHttpActionResult SummaryReport([FromUri]YourCustomClass tranData)
    {
        // your code
    }
    

    更好的选择是使用HttpPost。 在这种情况下,您将不得不使用JToken 而不是JObject。这是您的签名的样子

    [HttpPost]
    [Route("Api/ReportApi/SummaryReport")]
    public IHttpActionResult SummaryReport([FromBody]JToken tranData)
    {
        BankTransactionsViewModelResults transactions = tranData.ToObject<BankTransactionsViewModelResults>();
    
        // other processing code
        ....
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 2021-04-14
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多