2016-06-17 13 views
0

である私は、MVC 5 WEBAPIコントローラにAngularJSからオブジェクトを投稿しようとしていますが、値は常にnull投稿は常にnull

である私は、データができクロームdevのツールで見ることができます要請に応じて見つけることができます。

角度コントローラー:

$scope.join = function() { 
    if (!$scope.joinForm.$valid) return; 

    // Writing it to the server 
    var payload = $scope.user; 

    var res = $http.post('/api/some', JSON.stringify({ Data: { payload } }), { header: { 'Content-Type': 'application/json' } }); 
    res.success(function (data, status, headers, config) { 
     $scope.message = data;    
    }); 
    res.error(function (data, status, headers, config) { 
     alert("failure message: " + JSON.stringify({ data: data })); 
    }); 
} 

MVC 5 APIコントローラ:

public class SomeController : ApiController 
{   
    // POST api/values 
    public void Post([FromBody]string value) 
    {   
     Trace.Write(value); 
    } 
} 

私は私のオブジェクトをラップする場合は{データ:{ペイロード}}

{"Data":{"payload":{"symbol":"xxx","amount":12000,"startdate":"2014-05-23T14:26:54.106Z","enddate":"2015-05-23T14:26:54.106Z","interval":"7 minutes"}}} 

私はラップをいけない場合それは私が得る:

{"symbol":"xxx","amount":12000,"startdate":"2014-05-23T14:26:54.106Z","enddate":"2015-05-23T14:26:54.106Z","interval":"7 minutes"} 

(Visual Studio 2015はIISExpressを使用するように設定されています)

アイデアはありますか?

+0

を格納するためのクラスを作成します。あなたがコントローラ/アクションコンボのためにここに提供したURLに戻る –

+0

@DanPantry 'POST api/some'が' SomeController.Post' – Nkosi

答えて

1

理由がvalueであるのは、フレームワークのモデルバインダーが、ポスト本体で送信されたデータとパラメータを一致させることができなかったためです。

まあ、1のために、スクリプト内のURLが異なる指しているあなたのペイロード

public class User 
{ 
    public string symbol { get; set; } 
    public int amount { get; set; } 
    public DateTime startdate { get; set; } 
    public DateTime enddate { get; set; } 
    public string interval { get; set; } 
} 

更新コントローラ

public class SomeController : ApiController 
{   
    // POST api/post 
    public void Post(User user) 
    {   
     //consume data 
    } 
} 

角度コントローラ

$scope.join = function() { 
    if (!$scope.joinForm.$valid) return; 

    // Writing it to the server   
    var res = $http.post('/api/some', $scope.user, { header: { 'Content-Type': 'application/json' } }); 
    res.success(function (data, status, headers, config) { 
     $scope.message = data;    
    }); 
    res.error(function (data, status, headers, config) { 
     alert("failure message: " + JSON.stringify({ data: data })); 
    }); 
} 
+1

私は同意しますが、これを行うには単に$ scope.userをそのままJSON文字列に変換する必要があります。 – jbrown

+0

私はそれを確認するのに十分な角度に慣れていません。 – Nkosi

+0

@jbrown、[$ http.post](https://docs.angularjs.org/api/ng/service/$http#post)にチェックしたところ、正しいと思います。良いキャッチと感謝。 – Nkosi

関連する問題