2016-12-07 33 views
1

これは私の最初のasp.netコアアプリケーションですので、おそらく何かが分かりませんが、私は他のStackOverflow答えを見てきました。そこの解決策は私を助けませんでした。私は、サービスファブリック上で実行しているasp.netコアmvc​​アプリケーションを持って、私はコントローラに文字列を投稿しようとしています。文字列はもともとjsonオブジェクトの配列です。asp.net core mvc appへの投稿はnullボディとヌル入力パラメータ

私のAjaxのポスト:他の側に

var sendThis = { "operations": JSON.stringify(operations) }; 
$.ajax({ 
    url: '/Home/Execute', 
    type: 'POST', 
    data: sendThis, 
    dataType: "json", 
    contentType: 'application/json; charset=utf-8', 
    error: function (xhr) { 
     $("#save-footer-text").val("Saving failed. Please contact an administrator"); 
    }, 
    success: function (result) { 
     $(".save-footer").addClass("slider"); 
    }, 
    async: true 
}); 

私のコントローラ。私は別のスタックオーバーフローの答えからストリームのものを取ったが、それが完了したら空の文字列を返します。他のstackoverflowの答えから

[HttpPost] 
public IActionResult Execute([FromBody] string operations /*this is null*/) 
{ 
    var i = 5; 
    string documentContents; //this will be an empty string. 
    Request.Body.Position = 0; 
    using (Stream receiveStream = Request.Body) 
    { 
     using (StreamReader readStream = new StreamReader(receiveStream, Encoding.Unicode)) 
     { 
      documentContents = readStream.ReadToEnd(); 
     } 
    } 
    Console.WriteLine(i); 
    return new OkResult(); 
} 

、私はまた、trueにする伝統的なセットに投稿しようとした、と私は変更コントローラと、この

public class M 
{ 
    public string status { get; set; } 
    public string appName { get; set; } 
    public string startTime { get; set; } 
    public string endTime { get; set; } 
    public string description { get; set; } 
    public string operation { get; set; } 
} 

のように、モデルに業務を投稿してみました公共IActionResult Execute([FromBody] List<M> operations)

に私はJavascriptを要求ペイロードであることを報告クロームツールを使用して、リクエストを送信しないことをチェックしました:

O perations = ここに私のjsonの文字列

私もこれをワイヤーで見ています。

this答えて、私はまた、JsonSettingsを更新しようとしましたが、それもどちらか役に立たなかった。

asp.netコアパッケージでは1.0.0-rc2-final、サービスファブリックでは5.1.150を使用しています。

私はここで何が欠けていますか?申し訳ありませんが、答えが本当に些細な場合。何か助けてくれてありがとう。

+0

あなたは返信でコンテンツを返信していません。 'return Ok(documentContents);' – sudheeshix

+0

コントローラの空の文字列です。私の問題は、私に来るデータがnullだということです。 – Kolichikov

+0

アプリケーションはサービスファブリックで実行する前にローカルで動作していますか? – Win

答えて

0

スクリプト内の操作変数が配列の場合

var operations = new Array(); 

    var op1 = { status: 's1', appName: 'a1', startTime: 'st1', endTime: 'e1', description: 'd1', operation: 'o1' }; 
    operations.push(op1); 

    var op2 = { status: 's2', appName: 'a2', startTime: 'st2', endTime: 'e2', description: 'd21', operation: 'o2' }; 
    operations.push(op2); 

    var sendThis = JSON.stringify(operations); 
    ...// ajax call here 

コントローラポストの方法は次のように定義されています。List<M> operationsには、期待通りに値を含む必要があります。

[HttpPost] 
    public IActionResult Execute([FromBody]List<M> operations) 
    { 
     // ... some code here 
     return Json(""); 
    } 
0

これはMですか?

それがある場合は、あなたのJSONこの試すこの

var sendThis = { "operations": JSON.stringify(operations) }; 

ようにすべきではない:私はasp.netは、このようなオブジェクトをデシリアライズしようとしていると思います

var sendThis = JSON.stringify(operations); 

を:

public class Operation 
{ 
    public List<M> Operations { get; set; } 
} 
+0

モデルバインディングアプローチを使用するときにこれを試しました。私もstringifyを使用せずに(そして実際のオブジェクトを渡して)試みましたが、どちらの方法もうまくいきませんでした。 – Kolichikov

関連する問題