javascript - 在 http Post 中传递对象数组

标签 javascript c# angularjs

我开发了一个网络 API。我需要传递一个对象数组

[{"Id":"10010","lati":"12.991845763535506","longi":"77.54596710205078","PSID":"1001"},
 {"Id":"10011","lati":"12.97846402705198","longi":"77.55729675292969","PSID":"1001"},
 {"Id":"10012","lati":"12.967758119178907","longi":"77.54425048828125","PSID":"1001"}]

下面给出了Web api的模型类

定位.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace webapi.Models
{
    public class Locate
    {
       [Key][Required]
       public string Id { get; set; }
       public string lati { get; set; }
       public string longi { get; set; }
       public string PSID { get; set; }
     }
 }

Controller 文件中post方法对应的代码如下

LocatesController.cs

  // POST: api/Locates
    [ResponseType(typeof(Locate))]
    public async Task<IHttpActionResult> PostLocate(Locate locate)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.Locates.Add(locate);

        try
        {
            await db.SaveChangesAsync();
        }
        catch (DbUpdateException)
        {
          if (LocateExists(locate.Id))
            {
                return Conflict();
            }
            else
            {
                throw;
            }
        }

        return CreatedAtRoute("DefaultApi", new { id = locate.Id }, locate);
    }

    private bool LocateExists(string id)
    {
        return db.Locates.Count(e => e.Id == id) > 0;
    }

我在下面给出的 js 脚本中发送 http post 请求

app.js

  $scope.adding = function()
  {    
    var idd = $rootScope.vaar;
    var datas = [];
    var len = latitudes.length;
    for (var i = 0; i < len; i++) {
        datas.push({
            "Id": idd + i.toString(),
            "lati": latitudes[i].toString(),
            "longi": longitudes[i].toString(),
            "PSID": idd
        });
    }
 var jsonData = angular.Json(datas);
  var objectToSerialize = {'object':jsonData};
  var data = $.param(objectToSerialize);
   var config = {
        headers: {
            'Content-Type': 'application/-www-form-urlencoded;charset=utf-8'
        }
    }

    $http.post('http://localhost:8080/pool/api/locates/', data,config).success(function (data, status, headers, config) {
        alert("Success");
            }).error(function (data, status, header, config) {
            alert("An error has occured while adding!"+status);
             });
        }

它没有添加上面的数组。请帮助我

最佳答案

问题出在这里:

[ResponseType(typeof(Locate))]
public async Task<IHttpActionResult> PostLocate(Locate locate)

并且您正在发布一个数组,因此它应该是:

[ResponseType(typeof(Locate))]
public async Task<IHttpActionResult> PostLocate(List<Locate> locates)

关于javascript - 在 http Post 中传递对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38611728/

相关文章:

javascript - Angular 路由没有错误但不工作

javascript - 使用 Javascript/Typescript 防止 html 注入(inject)

c# - function1 和 function2 是否以线程安全的方式使用我的串口类?

C# 如何从 calendar.SelectedDate 中以 dd/MM/yyyy 格式获取日期

c# - Azure Webjob在0秒后重新启动。为什么?

javascript - Angular 选择的默认值不适用于对象

javascript - IIS Rewrite 在刷新时丢失 Angular 应用程序中的路径

javascript - 在Javascript中绑定(bind)回调函数? (不要与 Function.prototype.bind() 混淆)

javascript - 输入显示与 ng-model 中的值不同的值

javascript - 输入标签内的#是什么意思?