Передать массив объектов в http Post

0

У меня есть веб-апи. Мне нужно передать массив объектов

[{"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 приведен ниже

Locate.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; }
     }
 }

и код, соответствующий методу 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;
    }

Я отправляю запрос на отправку http в моем js-скрипте, приведенном ниже

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);
             });
        }

Он не добавляет вышеупомянутый массив. пожалуйста, помогите мне

  • 0
    Вы получаете правильный Json в данных
  • 0
    Измените angular.Json (данные) на angular.toJson (данные)
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

проблема здесь:

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

и вы отправляете массив так, что это должно быть:

[ResponseType(typeof(Locate))]
public async Task<IHttpActionResult> PostLocate(List<Locate> locates)
  • 0
    Контроллер ожидает один элемент, поэтому сделать это все еще будет проблематично. Неясно, хочет ли OP один Locate или, может быть, Locate имеет свойство, которое представляет собой список координат, и не знает, как его установить.
0

Проблема решена. Я изменил параметр на (List<Locate> locates) и сделал логику внутри метода post. Спасибо, Гленн Пэкер

Ещё вопросы

Сообщество Overcoder
Наверх
Меню