2017-12-26 18 views
2

jsonオブジェクトのPOSTリクエストを行い、それをクラスに変換しようとしていますが、動作していません。ここでは、オブジェクトを送信するだJSです:WebAPI POSTリクエストパラメータがnullです

var TheAjaxData = { 
    'Property1': 'TheValue1', 
    'Property2': 'TheValue2', 
    'Property3': 'TheValue3' 
} 

$.ajax({ 
    url: "/thewebapi/themethod", 
    type: "POST", 
    data: TheAjaxData, 
    contentType: 'application/json; charset=utf-8', 
    success: function (msg, textStatus, request) { 
     console.log(msg); 
    } 
}); 

WebAPIのは、私は、ルーティングが正しいことを知っているが、TheObjectがnullのリクエストを受信します。これはコードです:

[RoutePrefix("thewebapi")] 
public class TheWebAPIController : ApiController 
{ 
    [Route("themethod")] 
    public HttpResponseMessage Post([FromBody] TheRequestObjectModel TheObject) 
    { 
     var testvalue = TheObject.Property1; 
    } 

    public class TheRequestObjectModel 
    { 
     public string Property1 { get; set; } 
     public string Property2 { get; set; } 
     public string Property3 { get; set; } 
    } 
} 

これはGETではなくPOSTで動作する必要があります。私は近いと思うけど、うまくいきません。私が送信するオブジェクトをTheRequestObjectModelに変換するには、何を変更する必要がありますか?ありがとう。

+1

ペイロード 'data:JSON.stringify(TheAjaxData)'を文字列化する必要があります。 – Nkosi

答えて

2

は(JSONオブジェクトにデータをフォーマットとして)あなたのJSをJSONにオブジェクトを変換しよう:

var TheAjaxData = { 
    'Property1': 'TheValue1', 
    'Property2': 'TheValue2', 
    'Property3': 'TheValue3' 
} 

$.ajax({ 
    url: "/thewebapi/themethod", 
    type: "POST", 
    data: JSON.stringify(TheAjaxData), 
    contentType: 'application/json; charset=utf-8', 
    success: function (msg, textStatus, request) { 
     console.log(msg); 
    } 
}); 
1

あなたは[FromBody]とAPIアクションを飾るしたい場合は、データを投稿するとき、あなたはJSONにシリアライズしますクライアント側からJSON.stringify(TheAjaxData)を使用できます。

$.ajax({ 
    url: "/thewebapi/themethod", 
    type: "POST", 
    data: JSON.stringify(TheAjaxData), 
    contentType: 'application/json; charset=utf-8', 
    success: function (msg, textStatus, request) { 
     console.log(msg); 
    } 
}); 

もう1つの方法は、[FromBody]属性を削除し、javascriptオブジェクトを直接渡すことです。実際には、あなたの場合TheRequestObjectModelは文字列のプロパティを持っていて、別の複雑なオブジェクトを含んでいません。だから、[FromBody]属性を削除する方が良いかもしれません。

[Route("themethod")] 
public HttpResponseMessage Post(TheRequestObjectModel TheObject) 
{ 
    var testvalue = TheObject.Property1; 
} 

$.ajax({ 
    url: "/thewebapi/themethod", 
    type: "POST", 
    data: TheAjaxData, 
    contentType: 'application/json; charset=utf-8', 
    success: function (msg, textStatus, request) { 
     console.log(msg); 
    } 
}); 
関連する問題