2016-12-15 11 views
0

ASP.NET Core MVCのモデルバインディングに問題があります。私はJavascriptから呼び出されるとヒットしますが、postDataは常にnullです。ASP.NETコアの複合型のリストをモデルにバインドする

[HttpPost("/somepost")] 
    public string SomePost([FromBody] PostData postData) 
    { 
     return "Got It!"; 
    } 

    public class PostData 
    { 
     public int ID { get; set; } 
     public string[] ListOrArray { get; set; } // Doesn't matter if this ends up a List or an Array 
    } 

このエンドポイントは、$ .click関数からヒットされている:

$('img.some-image').click(function() { 
    array = ['sample data', 'some more']; 

    data = { 
     ID: 1, 
     ListOrArray: array 
    }; 

    $.ajax({ 
     type: 'POST', 
     url: '/somepost', 
     dataType: 'json', 
     contentType: 'application/json; charset=utf-8', 
     data: data, 
     success: function (result) { 
      console.log('Received: '); 
      console.log(result); 
     } 
    }); 
}); 

私は問題は結合モデルであることを推測しているが、私はわかりません。小文字のJavascriptオブジェクトのプロパティ名の例を見たことがありますが、それは私のために何も変わっていません。

また、POSTから[ValidateAntiForgeryToken]を削除する必要がありますが、私はそれを再度追加することをお勧めします.GET要求にトークンを追加してPOST用に提出する必要があると思いますしかし、私はそれを行う方法を考え出していない。私はそれが私の問題とは関係がないとは思わない。

回答とサンプルを検索しましたが、どれも私のために働いていません。 ASP.NET Coreはかなり新しく、そこにはあまりありません。私はバージョン1.1.0です。

+0

を使用することができ、あなたの変換するには:$( '入力[名前= "__ RequestVerificationToken"]')のval();'インチあなたのデータオブジェクト –

答えて

3

contentType:jsonを設定しましたが、plain objectを送信する場合は、json objectを送信する必要があります。

はちょうど `__RequestVerificationTokenが含まれ、objectjson objectにあなたはトークンを追加するにはJSON.stringify

$.ajax({ 
    type: 'POST', 
    url: '/somepost', 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(data), 
    success: function (result) { 
     console.log('Received: '); 
     console.log(result); 
    } 
}); 
+0

'datatype'は、投稿されたもの(サーバが返信するタイプを指定します)とは何の関係もありません。あなたは 'contentType: 'json'を設定しましたが、... _ –

+0

@StephenMueckeはいと言っていたと思います。 – Mairaj

関連する問題