2016-07-27 4 views
0

私はWeb APIを開発しました。私は、Web APIのモデルクラスが与えられるhttpポストでオブジェクトの配列を渡す

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

とコントローラファイルの方法をポストに対応するコードの下に与えられ

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

オブジェクトの配列を渡す必要が

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; 
    } 
以下

私は、それは上記の配列を追加しません

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

の下に与えられた私のjsのスクリプトで、HTTP POSTリクエストを送信します。

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

、それがあるべきようあなたは、配列を掲示されています:問題が解決され

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

データで正しいJsonを取得していますか。 –

+0

角度を変更してください.Json(datas)からangular.toJson(datas) –

+0

コンテンツタイプは 'application/json'にする必要があります。あなたのコントローラーはオブジェクトを期待していますが、配列を渡しています。 – Crowcoder

答えて

1

を助けてください。私はパラメータを(List<Locate> locates)に変更し、ポストメソッドのロジックを作りました。グレンパッカーありがとうございます。

+0

コントローラーは1つのアイテムを期待しているので、これは問題ありません。 OPが1つの 'Locate'を望んでいるのか、あるいは' Locate'が座標のリストで、それを設定する方法を知らないプロパティを持っているのかどうかは不明です。 – Crowcoder

0

問題はここにある私に

関連する問題