首頁 >web前端 >js教程 >如何在 ASP.NET MVC 中將 JSON POST 資料作為物件傳遞給 Web API 方法?

如何在 ASP.NET MVC 中將 JSON POST 資料作為物件傳遞給 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 方法的客戶參數出現空值。此問題是由於瀏覽器使用的預設 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”,模型binder 會準確識別JSON 資料並將其綁定到對應的類別物件。

傳遞複雜對象

如果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;
}

以上是如何在 ASP.NET MVC 中將 JSON POST 資料作為物件傳遞給 Web API 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn