JSON POST データをオブジェクトとして Web API メソッドに渡す
ASP.NET MVC では、顧客オブジェクトを JSON 形式でオブジェクトとして渡します。 POST リクエストでは、POST メソッドの顧客パラメータに NULL 値が含まれる場合があります。この問題は、ブラウザで使用されるデフォルトの Content-Type である「application/x-www-form-urlencoded」が原因で発生します。
解決策
問題は、POST リクエストの Content-Type ヘッダーを「application/json」に設定する必要があります。これは、次に示すように、リクエストのヘッダーで Content-Type: "application/json" を使用することで実現できます。
$(function () { var customer = {contact_name :"Scott",company_name:"HP"}; $.ajax({ type: "POST", data :JSON.stringify(customer), url: "api/Customer", contentType: "application/json" }); });
Content-Type を "application/json" として指定すると、モデルはバインダーは JSON データを正確に認識し、対応するクラス オブジェクトにバインドします。
Passing Complexオブジェクト
Web API メソッドのパラメーターが次のような複雑なオブジェクトである場合:
public class CustomerViewModel { public int Id {get; set;} public string Name {get; set;} public List<TagViewModel> Tags {get; set;} }
このオブジェクトをクライアント側から送信するには、次のコードを使用できます。
//Build an object which matches the structure of our view model class var model = { Name: "Shyju", Id: 123, Tags: [{ Id: 12, Code: "C" }, { Id: 33, Code: "Swift" }] }; $.ajax({ type: "POST", data: JSON.stringify(model), url: "../product/save", contentType: "application/json" }).done(function(res) { console.log('res', res); // Do something with the result :) });
[FromBody] を確認します属性
リクエスト本文からのモデル バインディングを有効にするには、Web API メソッド パラメーターを [FromBody] 属性で修飾する必要があります。この属性を省略すると、フラット プロパティは正しくバインドされますが、複雑なプロパティは空のままになります。
[HttpPost] public CustomerViewModel Save([FromBody] CustomerViewModel m) { return m; }
以上がJSON POST データを ASP.NET MVC のオブジェクトとして Web API メソッドに渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。