servicestack이 json post 요청에 모델 바인딩을 만들 수 없는 이유는 무엇입니까?
-
12-12-2019 - |
문제
$.ajax({
type: 'POST',
url: "/api/student",
data:'{"x":3,"y":2}',
dataType: "json",
complete: function (r, s) {
debugger;
},
success: function(response){
debugger;
},
contentType: "application/json" // !!!!!!!!!!!! The reason of problem. I could see Json on firebug. It was false-positive for my code !
});
Firebug를 통해 스트림을 추적했습니다.Firebug가 JSON 개체를 인식하고 표시했습니다.
이 코드는 RestServiceBase의 OnPost 메서드에 액세스했지만 모델 바인딩이 작동하지 않았습니다.Json 개체와 C# 클래스의 속성 이름은 정확히 동일해야 합니까?
아니면 내가 뭔가를 놓치고 있는 걸까?(예, 뭔가 빠졌네요!)
추신: URL을 "/api/student/json/asynconeway"로 변경했지만 404 오류가 발생했습니다.
해결책 3
를 추가해야합니다.
DataType : Ajax 요청에 대한 응용 프로그램 / json "속성!
다른 팁
서비스스택 하다 모델은 JSON POST(및 x-www-form-urlencoded를 포함하여 지원되는 모든 콘텐츠 유형)를 바인딩합니다.
에는 많은 예가 있습니다. ServiceStack.예제 그게이 일을합니다.
이 코드는 RestServicebase의 OnPost 메소드에 액세스했지만 모델 바인딩은 작동하지 않았습니다.
바인딩하려는 DTO가 무엇인지 표시하지 않았습니다.하지만 이 JSON
{"x":3,"y":2}
일치하는 DTO에 매핑됩니다. 예:
public class Student {
public int X { get; set; }
public int Y { get; set; }
}
Json 개체와 C# 클래스의 속성 이름은 정확히 동일해야 합니까?
물론 이름도 일치해야 하지만, 대소문자를 구분하지 않습니다, 위 참조.
추신 : URL을 "/API/Student/JSON/Asynconeway"로 변경했지만 404 오류가 발생했습니다.
이것은 잘못된 것입니다.다음을 사용하려는 경우 자동으로 사전 정의된 경로, 올바른 URL은 다음과 같습니다.
/api/json/asynconeway/student
당신의 가정 DTO 요청 라고 Student
.
여기에 몇 가지 코드 :
$.ajax({
type: "POST",
url: "/artist/delete",
data: { id: itemId },
success: function () {
$("div#" + itemId).fadeOut(function () { $(this).remove(); });
}
});
.
편집 : 죄송합니다. 나는 당신이 거기에서 원하는 것을 틀리고, 당신에게 질문을 할 것입니다, 왜 당신이 이와 같이 함수를 만들 수있는 곳으로 JSON을 보내는 이유 :
.
[HttpPost]
public ActionResult Delete(int id)
{
var artist = _db.Artists.Where(x => x.ID == id).SingleOrDefault();
if (artist == null)
{
return Content("false");
}
else
{
_db.Artists.DeleteOnSubmit(artist);
_db.SubmitChanges();
return RedirectToAction("Post");
}
}
edit2 : 여기에 구문 오류가 있습니다. data:'{"x":3,"y":2)}',
.
edit3 : 다른 구문 오류
.
}
}
});
코드가 끝나면