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
반응형