servicestack이 json post 요청에 모델 바인딩을 만들 수 없는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com//questions/11678610

  •  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 : 다른 구문 오류

        }
        }
    });
.

코드가 끝나면

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top