2016-07-27 25 views
0

我開發了一個web api。我需要通過對象的數組在http中傳遞對象的數組Post

[{"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"}] 

模型類網頁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; } 
    } 
} 

和對應於在後控制器文件的方法的代碼中給出給定下面

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

它不添加上述陣列。請幫我

+0

你是否在數據中獲得正確的Json –

+0

將angular.Json(數據)更改爲angular.toJson(數據) –

+0

你的內容類型應該是'application/json'。而你的控制器正在期待一個對象,但你正在傳遞一個數組。 – Crowcoder

回答

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'有一個屬性是一個座標列表並且不知道如何設置它。 – Crowcoder

0

的問題就解決了。我將參數更改爲(List<Locate> locates)並在post方法中做了一個邏輯。謝謝Glenn Packer

相關問題