>웹 프론트엔드 >JS 튜토리얼 >ASP.NET MVC에서 JSON POST 데이터를 웹 API 메서드에 개체로 전달하는 방법은 무엇입니까?

ASP.NET MVC에서 JSON POST 데이터를 웹 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 값이 나타날 수 있습니다. 이 문제는 브라우저에서 사용하는 기본 콘텐츠 유형("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 개체

웹 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] 확인 속성

요청 본문에서 모델 바인딩을 활성화하려면 웹 API 메서드 매개 변수를 [FromBody] 속성으로 장식해야 합니다. 이 속성을 생략하면 일반 속성은 올바르게 바인딩되지만 복합 속성은 비어 있는 상태로 유지됩니다.

[HttpPost]
public CustomerViewModel Save([FromBody] CustomerViewModel m)
{
    return m;
}

위 내용은 ASP.NET MVC에서 JSON POST 데이터를 웹 API 메서드에 개체로 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.