문제
파일 뒤에 코드가있는 ASMX 파일을 만들었습니다. 잘 작동하지만 XML을 출력합니다.
그러나 JSON을 출력해야합니다. ResponseFormat 구성이 작동하지 않는 것 같습니다. 내 코드-하인은 다음과 같습니다.
[System.Web.Script.Services.ScriptService]
public class _default : System.Web.Services.WebService {
[WebMethod]
[ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]
public string[] UserDetails()
{
return new string[] { "abc", "def" };
}
}
해결책
에서 WebService는 ResponseFormat이 JSON으로 설정된 경우에도 XML을 반환합니다:
요청이 GET가 아닌 사후 요청인지 확인하십시오. Scott Guthrie는 a 이유를 설명하는 게시물.
jQuery를 위해 특별히 작성되었지만 이것은 당신에게도 유용 할 수 있습니다.
jQuery를 사용하여 ASP.NET JSON 웹 서비스를 소비합니다
다른 팁
순수한 JSON 문자열을 받으려면 XML로 싸지 않고 JSON 문자열을 직접 작성해야합니다. HttpResponse
그리고 변경 WebMethod
반환 유형으로 void
.
[System.Web.Script.Services.ScriptService]
public class WebServiceClass : System.Web.Services.WebService {
[WebMethod]
public void WebMethodName()
{
HttpContext.Current.Response.Write("{property: value}");
}
}
이것은 아마도 지금까지 오래된 뉴스 일 것입니다. 그러나 마법은 다음과 같습니다.
- ScriptService] 웹 서비스 클래스의 속성
- scriptMethod (usehttpget = true, responsmat = responsmat.json)]
- Content-Type : 요청시 Application/JSON
그 작품을 제자리에 놓으면 GET 요청이 성공적입니다.
HTTP 게시물의 경우
- scriptMethod (usehttpget = false, responsmat = responsmat.json)]
그리고 클라이언트 측에서 (웹 메드가 MethodName이라고 가정하고 SearchString이라는 단일 매개 변수가 필요합니다) :
$.ajax({
url: "MyWebService.asmx/MethodName",
type: "POST",
contentType: "application/json",
data: JSON.stringify({ searchString: q }),
success: function (response) {
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus + ": " + jqXHR.responseText);
}
});
어려운 방법 (기본적으로 Google에서 4 시간을 소비)을 배운 빠른 Gotcha, ASPX 파일에서 Pagemethods를 사용하여 JSON ([scriptMethod ()] 마커와 함께 정적 메소드를 위해 반환 할 수 있지만 이동하기로 결정한 경우 ASMX 파일에 대한 정적 메소드는 정적 메소드가 될 수 없습니다.
또한 웹 서비스 컨텐츠 유형 : Application/JSON을 통화에서 다시 가져 오려면 jQuery를 사용하고 있습니다. 3 jQuery를 사용할 때 피해야 할 실수 기사는 매우 깨달았습니다. 여기에서 다른 답변에 언급 된 같은 웹 사이트에서 나온 것입니다).
클라이언트 스크립트 또는 서버 측에서 웹 서비스를 호출하고 있습니까?
서버로 컨텐츠 유형 헤더를 보내는 것이 도움이 될 수 있습니다.
'응용 프로그램/JSON; charset = utf-8 '
클라이언트 측에서 프로토 타입 클라이언트 측 라이브러리를 사용하며이를 지정할 수있는 AJAX 호출을 할 때 ContentType 매개 변수가 있습니다. jQuery에는 getjson 방법이 있다고 생각합니다.
대안 : 일반 HTTP 핸들러 (.ASHX)를 사용하고 좋아하는 JSON 라이브러리를 사용하여 JSON을 수동으로 직렬화하고 손 으로화하십시오.
요청 처리를 완전히 제어하고 응답을 생성하면 .NET가 간단하고 편안한 웹 서비스에 대해 다른 모든 것을 이길 수 있습니다.