ホームページ >ウェブフロントエンド >jsチュートリアル >JSON POST データを ASP.NET MVC のオブジェクトとして Web API メソッドに渡す方法

JSON POST データを ASP.NET MVC のオブジェクトとして Web API メソッドに渡す方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-08 05:37:02618ブラウズ

How to Pass JSON POST Data to a Web API Method as an Object in ASP.NET MVC?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。