2013-03-24 3 views
0

PUT 요청을 수락하기 위해 ASP.Net 3.5 프로젝트에서 WebService를 가져올 수 없습니다. MyService.asmx에서ASP.Net 3.5 WebService에서 AJAX PUT 요청을 수락하는 방법은 무엇입니까?

var url = '/MyService.asmx/UpdateObject'; 
var options = { 
    dataType: "json", 
    contentType: "application/json", 
    cache: false, 
    type: "PUT", 
    data: data ? ko.toJSON(data) : null 
}; 

$.ajax(url, options); 

, 나는 다음과 같습니다 :

[WebMethod(EnableSession = true)] 
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json, UseHttpGet=true)] 
public ButDto UpdateObject(ObjectDto myObject) 
{ 
    //Do some stuff here 

    return myObject; 
}  

그러나, 나는 다음과 같은 오류 메시지가 점점 오전 :

을 여기

는 AJAX 호출입니다 POST 요청을 사용하여 UpdateObject 메소드를 호출하려는 시도가 허용되지 않았습니다.

시도는 메서드를 호출하려고했습니다 : 내 웹 서비스 선언에서 "UseHttpGet = true"를 제거하고 내가 같은 아약스 호출을 수행 할 경우

, 나는 다음과 같은 오류 메시지가 무엇입니까 GET 요청을 사용하는 UpdateObject는 허용되지 않습니다.

그래서 나는 여기서 약간 당황하고 있습니다.

UPDATE는 :

또한 데이터 유형 시도 : "텍스트",하지만 결과는 동일했다.

답변

1

MSDN에서 POST와 GET은 ScriptMethod에서 유일하게 허용되는 HTTP 동사입니다.

왜 오류가 발생합니까? AJAX 요청을 보낼 때 JSON 배열을 data 속성에 넣으면 jQuery가이를 쿼리 문자열로 직렬화하여 서버로 보냅니다. 그러나 그것은 ASP.NET이 찾고있는 것이 아닙니다. jQuery에 사용할 JSON 문자열을 전달해야합니다. 마찬가지로 : 당신이 요청을 완료하는 데 필요한 JSON 문자열로 자바 스크립트 객체를 설정하려는 경우

var url = '/MyService.asmx/UpdateObject'; 
var options = { 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", // add charset for good measure 
    cache: false, 
    type: "POST", 
    data: "{'id':2, 'name':'foobar'}" // notice the quotes here 
}; 

$.ajax(url, options); 

당신은 JSON2 뭔가 JSON.stringify()을 사용할 수 있습니다.

자세한 내용은 http://encosia.com/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/을 참조하십시오. 여기에는 일반적인 실수 중 일부에 대한 많은 정보가 있습니다.

+0

정보 및 좋은 조언을 해주신 Steven에게 감사드립니다! POST를 사용하여 엔티티를 업데이트 할 수 있다고 생각합니다. 그러나 필자가 읽은 바에 따르면 엔티티와 PUT을 생성하기 위해 POST를 사용해야합니다. Microsoft의 ScriptMethod가 PUT 및 DELETE 요청을 허용하지 않는 것은 부끄러운 일입니다. PUT 요청을 받아 들일 ASP.Net 3.5 웹 서비스를 작성하는 또 다른 방법이 있습니까? –

+0

@ Jean-FrançoisBeauchamp RESTful 설정에서는 완전히 정확합니다. PUT은 엔티티를 바꾸거나 업데이트하는 것입니다. 나는 POST 요청으로 엔티티를 생성/업데이트하는 것이 허용 가능하다고 생각한다. PUT을 수락하려면 웹 서비스 외부에 무언가를 써야한다고 생각합니다. 일반적인 핸들러일까요? 그러나 그 경로를 따라 간다면 웹 서비스가 제공하는 자동 직렬화 및 매핑 중 일부가 손실 될 수 있습니다. –

+0

답장을 보내 주셔서 감사합니다. 마지막으로 삽입, 업데이트 및 삭제와 관련된 모든 것에 POST를 사용했습니다. –