문제

파일 뒤에 코드가있는 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가 간단하고 편안한 웹 서비스에 대해 다른 모든 것을 이길 수 있습니다.

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