2016-12-13 9 views
3

次の呼び出しを使用してc# web api controllerにデータを送信しています。サーバ側jQuery AJAX投稿データがC#Web APIコントローラで無効です

$.ajax({ 
    type: "POST", 
    url: "menuApi/menu/Cost", 
    data: JSON.stringify(order), 
    contentType: "application/json", 
    success: function (data) { window.alert('done')}, 
    dataType: 'json' 
}); 

c# controllerは次のようである:

public string Cost([FromBody] string order) 
{ 
    var sOrder = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(order); 

    return ""; 
} 

JavaScriptでは順序オブジェクトは、ネストされた配列とのプロパティを持つ複雑なオブジェクトです。私はnullとしてデータを取得しています。私はどのように注文をAJAX呼び出しで送ることができるのか分かりません。

編集:これは私のためのオブジェクト

var order = { 
    name:"", 
    id:"", 
    cost:"", 
    details: { 
     sItem:[{name:"",cost:""}], 
     dItem:[{name:"",cost:"", components:[{name:"",quantity:""}]}] 
    } 
} 
+0

の定義を示してください。 'order' – Mairaj

+0

あなたのコントローラをデコレートする[HttpPost]属性を持つコストメソッド –

+0

使い方:' application/json; charset = utf-8' –

答えて

1

がそれを手に入れた、あなたはこのような空のパラメータ/フォームフィールド名とフォームデータとしてAJAX要求をポストする必要があります。

var order = { 
     name: "", 
     id: "", 
     cost: "", 
     details: { 
      sItem: [{ name: "", cost: "" }], 
      dItem: [{ name: "", cost: "", components: [{ name: "", quantity: "" }] }] 
     } 
    }; 
    $.ajax({ 
     type: "POST", 
     url: "api/Values", 
     data: {'': JSON.stringify(order)} , 
     success: function (data) { window.alert('done') },    
    }); 
+0

それは私のために働いていない。私が直面している唯一の問題は、複雑なネストされた配列オブジェクトである実際のオブジェクトが取得するデータがnullの場合です。私もあなたの例を試しました orderStr = "Hello"; $アヤックス({ タイプ: "POST"、 URL: "menuApi /メニュー/原価"、 データ:{ '':orderStr}、 のcontentType: "アプリケーション/ JSON;のcharset = UTF-8"、 成功:function(data){window.alert( 'done')}、 }); – Novice

+0

コード1:1をコピーしましたか?そのcontentTypeパラメータを削除してください –

+0

私は1:1を試してみましょう – Novice

0

デシリアライズのためのモデルバインダーのすでにあなたのためにそれを行って、不要です。パラメータタイプをobjectまたはdynamicに変更するだけです。シングの左側には、その冗長な処理を除去するための配慮です:

public string Cost([FromBody] object order) 
    { 
     var sOrder = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(order.ToString()); 

     return ""; 
    } 
+0

ここでは何も自動化されていません。 MVCプロジェクトではありません。私は、Web APIを追加し、それをajax呼び出しから呼び出しています。 – Novice

+0

écéc、私はWeb APIコントローラでそれをやった。 :) –

関連する問題