2016-10-17 13 views
0

この問題には多くの質問がありますが、ASP.NET Web API 2メソッドにデータを投稿することはできません。これはすべて同じホストとポートに出入りしています。Web API Postはメソッドのパラメータにデータをバインドしません

ここに私のサーバー側のコードです:

[RoutePrefix("api/help")] 
public class HelpAPIController : ApiController 
... 
public class Item { 
    public string name { get; set; } 
    public string position { get; set; } 
} 

[Route] 
[HttpPost] 
public void Post([FromBody] Item[] stuff) 
     ; // we get here but data is always null or zero items in array 
} 

Javascriptを:

"use strict"; 
var a = [{ "name": "me", "position": "here" }, 
     { "name": "me", "position": "here" }, 
     { "name": "me", "position": "here" }]; 

jQuery.ajax({ 
    type: "POST", 
    datatype: "application/json", 
    url: "/api/help/", 
    data: { "stuff": JSON.stringify(a) }, 
    success: function (data) { alert(data); }, 
    error: function (error) { 
     ... 
    } 
}); 

実際の要求内容(なしハードリターン):

stuff:[{"name":"me","position":"here"}, 
     {"name":"me","position":"here"}, 
     {"name":"me","position":"here"}] 
+0

ではなく '項目[]' 'の一覧'で動作しますか? –

+0

@PetreTurcu Nopeは、配列のない単一オブジェクトでも機能しません(サーバーとクライアントの両方が配列を指定していない場合)。項目がないか空です。 –

答えて

2
  1. コンテンツタイプをサーバーに渡していません。 datatypeは、サーバーから期待する応答タイプです。 contentTypeはあなたが送信したものです。 jQueryのデフォルトのcontentTypeapplication/x-www-form-urlencoded; charset=UTF-8です。

    dataType: "json", 
    contentType: "application/json", 
    
  2. オブジェクトにデータ配列をラップする必要はありません。これが行います。

    data: JSON.stringify(a), 
    
+0

contentTypeとJSON.stringify(a)の両方の変更が必要でした。 –

2

は、あなたのAjax POSTでcontentType: "application/json"を追加してみてください。

あなたはdataTypeを持っていますが、私はそれがあなたが送信している内容であるのに対し、サーバーから戻ると思います。

+0

contentTypeについて確かに正しいですが、stringify部分も変更しなければなりませんでした。 contentTypeは、ソリューションの90%でした。私は2つの答えを正確にマークすることができたらいいと思う。 –

関連する問題