將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中文網其他相關文章!