2017-03-02 4 views
0

HTTP POSTを使用してASP.NET Web API 2アクションにデータを送信するASP.NET MVC 5 Webアプリケーションがあります。 Web APIアクションはヒットしますが、データはすべてnullです。jsonデータをWeb API 2のアクションに適切にPOSTする方法

POSTがから送信されます。

[System.Web.Http.HttpPost] 
[System.Web.Http.Route("{id:int}")] 
[ResponseType(typeof(Models.MyModel))] 
[EnableCors(origins: "*", headers: "*", methods: "*")] 
public IHttpActionResult Post(int id, Models.MyModel json){ 
    return Ok(200); // break point is hit but json doesn't have the data sent from client. 
} 

と私のモデルは次のとおりです:私のウェブAPIアクションがある

var url = 'http://MyWebApi/api/MyController/MyAction/1'; 
var obj = { pamA: 'a', pamB: 1 }; 
var data = { json: ko.toJSON(obj) }; 
// var data = ko.toJSON(obj); // tried this too, but same problem. 

$.ajax({ 
    type: 'post', 
    dataType: 'json', 
    url: url, 
    data: data, 
}); 

public class MyModel{ 
    public string pamA {get; set;} 
    public int pamB {get; set;} 
} 
+0

は試してみてください。 'VARデータ= ko.toJSON(OBJ);' –

+0

@ChrisPratt、私は、まだ同じ問題を試してみました。ありがとうございました。 –

+0

これで、次にAJAX呼び出しで 'contentType:" application/json "'を使用します。 –

答えて

1

まず第一に、私はそのお分かりやすくするために提案あなたのウェブアクションであなたのパラメータがどこから来ているのかをマークしてください。このようなもの

[System.Web.Http.HttpPost] 
[System.Web.Http.Route("{id:int}")] 
[ResponseType(typeof(Models.MyModel))] 
[EnableCors(origins: "*", headers: "*", methods: "*")] 
public IHttpActionResult Post([FromUri]int id, [FromBody]Models.MyModel json){ 
    return Ok(200); // break point is hit but json doesn't have the data sent from client. 
} 

これはあなたの問題ではない、私は強迫観念です。とにかくあなたの問題はあなたのAjaxリクエストから生じると思います。

var url = 'http://MyWebApi/api/MyController/MyAction/1'; 
var obj = { pamA: 'a', pamB: 1 }; 
var data = { json: ko.toJSON(obj) }; 

$.ajax({ 
    type: 'post', 
    dataType: 'json', 
    url: url, 
    data: data, 
}); 

は次のようになります。

var url = 'http://MyWebApi/api/MyController/MyAction/1'; 
var data = { pamA: 'a', pamB: 1 }; 

$.ajax({ 
    type: 'post', 
    dataType: 'json', 
    url: url, 
    data: data, 
}); 

あなたmymodelというオブジェクトがフィールドPAMAとpamBを持つようにJSONを期待しています。しかし、あなたのjsonオブジェクトは実際にはのようになります。{"json":{"pamA": "a"、 "pamB":}} jsonは、オブジェクトには "json"という名前のプロパティが含まれている必要がありますプロパティpamAとpamBを持つオブジェクト。 MyModelオブジェクトを現在送信しているJSONにマップできるようにするには、このように表示する必要があります。 {PAMA​​: 'A'、pamB:1}

+0

var data = {pamA: 'a'、pamB:1}を変更すると動作します。ロケーションマーカー[FromUri]はオプションです。 –

+0

はい、私はそれらがオプションであることを知っています、私はちょうどそれが示唆であったと言いました。データがどこから来ているのかを明確にするために私がしたいことです。 私は質問に答え、アップボートには答えませんでしたか? – victor

1

jQueryのajax方法については、dataType

public class OtherModel { 
     public MyModel json; 
} 

しかし、私はあなたがちょうど "JSON" フィールドを廃止して、JSONリクエストは次のように見えるように示唆しますあなたが応答として期待しているものを指定しているので、おそらくそれが必要になるでしょう。 contentTypeオプションは、要求本体のフォーマット方法を指定します。デフォルトはapplication/x-www-form-urlencodedであるため、代わりにapplication/jsonを指定する必要があります。

$.ajax({ 
    type: 'post', 
    dataType: 'json', 
    contentType: 'application/json', 
    url: url, 
    data: data, 
}); 
関連する問題