programing

표준 웹 양식 .Net에서 JSON 개체를 반환하는 방법

abcjava 2023. 8. 19. 09:42
반응형

표준 웹 양식 .Net에서 JSON 개체를 반환하는 방법

목표는 메소드를 호출하여 JSON 객체를 반환하는 것입니다.

JSON은 처음입니다.

나는 default.aspx와 그 안에 다음과 같은 코드가 있습니다.이제 저는 Default.aspx.cs 의 일반적인 방법이 여기 클릭 이벤트에서 실행되기를 원합니다.

$(".day").click(function (event) {
var day = $(event.currentTarget).attr('id');
if (day != "") {
    $.ajax(
    {
        type: "POST",
        async: true,
        url: 'Default.aspx?day=' + day,
        data: day,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            console.log("SUCCESS:" + msg);
            //  $(".stripp img").attr('src', "data:image/jpg;" + msg);
            //  $(".stripp").show();
        },
        error: function (msg) {
            console.log("error:" + msg);
        }
    });
}

});

Default.aspx.cs 은 다음과 유사합니다.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["day"] != null)
            GetFile(Request.QueryString["day"]);
    }
    public string GetFile(string day)
    {
        string json = "";
        byte[] bytes = getByteArray();

        json = JsonConvert.SerializeObject(bytes);
        return json;
    }

제가 어디서 잘못되고 있나요?어떤 식으로 사용해야 합니까? 아니면 웹 서비스에서만 사용할 수 있습니까?

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

제가 제안하고 싶은 것은HttpHandler페이지 수명 주기가 없고(따라서 속도가 빠름) 코드 분리가 훨씬 깔끔할 뿐만 아니라 재사용 가능성도 뛰어납니다.

프로젝트의 "일반 처리기" 유형에 새 항목을 추가합니다.새 .ashx 파일이 생성됩니다.구현하는 모든 클래스의 주요 방법IHttpHandler이라ProcessRequest원래 질문의 코드를 사용하려면 다음과 같이 하십시오.

public void ProcessRequest (HttpContext context) {

    if(String.IsNullOrEmpty(context.Request["day"]))
    {
        context.Response.End(); 
    }

    string json = "";
    byte[] bytes = getByteArray();

    json = JsonConvert.SerializeObject(bytes);
    context.Response.ContentType = "text/json";
    context.Response.Write(json);
}

AJAX 호출의 URL을 변경하면 됩니다.JavaScript는 다음과 같습니다. 여기서 GetFileHandler.ashx는 방금 만든 IHTtpHandler의 이름입니다.

$.ajax(
    {
        type: "POST",
        async: true,
        url: 'Handlers/GetFileHandler.ashx',
        data: "Day=" + $.toJSON(day),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            console.log("SUCCESS:" + msg);
        },
        error: function (msg) {
            console.log("error:" + msg);
        }
    });

고려해야 할 또 다른 작은 점은 처리기 코드 자체 내에서 세션 개체에 대한 액세스가 필요한 경우 다음에서 상속해야 합니다.IRequiresSessionState인터페이스:

public class GetFileHandler : IHttpHandler, IRequiresSessionState

예, 메서드는 WebMethod 특성과 함께 정적이어야 합니다.

기본 예:

CS

using System;
using System.Web.Services;

public partial class _Default : System.Web.UI.Page
{
  [WebMethod(EnableSession=false)]
  public static string HelloWorld()
  {
    return "Hello World";
  }
}

자바스크립트

<script>
    $.ajax({
      type: "POST",
      url: "Default.aspx/HelloWorld",
      data: "{}",
      contentType: "application/json",
      dataType: "json",
      success: function(msg) {
        console.log(msg.d);
      }
    });
</script>

웹 양식으로 작업한 지 오래되었지만, 정확히 기억한다면 웹 메서드 속성을 GetFile 메서드 위에 놓고 해당 메서드를 정적으로 만들면 작동할 것입니다.

 [WebMethod]
 public static string GetFile(string day)

게다가, 아약스 방식으로 데이터를 게시하는 방법은 약간 다릅니다.URL에서 쿼리 문자열 day를 제거하고 데이터는 json 형식({"day":day})이어야 합니다.

언급URL : https://stackoverflow.com/questions/8072745/how-to-return-a-json-object-in-standard-web-forms-net

반응형