금백조의 개발 블로그

[.NET Core]JSON 전송시 Controller param null 에러 해결 본문

Web/.NET Core

[.NET Core]JSON 전송시 Controller param null 에러 해결

금백조 2022. 10. 22. 19:48
반응형

[문제]

 

.NET Framework에 구현된 기능을 .NET Core로 이관하는 중 문제가 발생

아래 예제처럼 ajax를 통해 Member Controller에 요청할 경우 JSON 데이터를 보냈음에도 불구하고 param(name, age)값이 모두 null이 되는 현상 발생

 

문제의 코드

 

[memberRegister Method]

function memberRegister() {
            $.ajax({
                type: "POST",
                url: "/Member/Register",
                data: '{"name": "' + $('#name').val() + '", "age": "' + $('#age').val() + '" }',
                contentType: "application/json; charset=UTF-8",
                dataType: "json",
                success: function (response) {
 
                },
                failure: function (response) {

                },
                error: function (response) {

                }
            });
        }

[Member Controller - Register Method]

public JsonResult Register(string name, int age)//name=null, age=null
 {
      var result = memberService.RegisterMember(name, age);

      return Json(result);
}

 

[해결]

 

찾아보니 JSON의 value 형식과 Controller의 param 형식이 일치하지 않아 발생하는 현상이라 함...

즉 위 예제에서 JSON의 age는 string인데 Controller의 age는 int였던게 원인

또한 메소드 내에 파라미터 인자를 추가하여 받는 방식은 JSON으로 받아지지 않는다.

따라서 Member Model을 정의 후 바인딩하여 해결!

 

해결 코드

 

[memberRegister Method]

function memberRegister() {
            $.ajax({
                type: "POST",
                url: "/Member/Register",
                //age value 양옆의 "(큰따옴표)를 지워준다.
                data: '{"name": "' + $('#name').val() + '", "age": ' + $('#age').val() + '}',
                contentType: "application/json; charset=UTF-8",
                dataType: "json",
                success: function (response) {
 
                },
                failure: function (response) {

                },
                error: function (response) {

                }
            });
        }

[Member Controller - Register Method]

public JsonResult Register([FromBody]Member member)//name="swan", age=10
 {
      var result = memberService.RegisterMember(Member.name, Member.age);

      return Json(result);
}

 

[결론]

 

JSON 전송시 param 값이 null로 찍힐 경우 json value 값의 형식이 올바르게 전달됐는지 확인합시다!

 

[Reference]

 

[c# - web-api POST body object always null - Stack Overflow]

https://stackoverflow.com/questions/22741943/web-api-post-body-object-always-null

반응형