如何在 asp.net c# Webforms 中使用 Webhook 获取 json 字符串作为响应

How to get json string as response using Webhook in asp.net c# Webforms

我的 SMS 公司有一些 Webhook 方法可以将发送报告发送到我们的首选 url,然后我们必须从那个 url 获取数据并将其更新为日志。

为此,我使用以下代码:

HttpWebRequest request = WebRequest.Create("http://example.com/sms/response.html") as HttpWebRequest;
        request.UserAgent = "jaidevkh";
        request.ContentType = "text/html,application/xhtml+xml,application/xml; charset=utf-8";
        request.Accept = "text/html,application/xhtml+xml,application/xml";
        request.Method = "GET";
        //request.ContentLength = 0;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        WebHeaderCollection header = response.Headers;
        var encoding = ASCIIEncoding.ASCII;
        string responseText = "";
        using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
        {
            responseText = reader.ReadToEnd();
        }
        Label kl = (Label)cph.FindControl("j");
        kl.Text = responseText.ToString();

和 json 格式将根据 SMS 供应商提供如下:

data=[
      {
          "requestId":"35666a716868323535323239",
          "userId":"38229",
          "report":[  
              {  
                  "desc":"REJECTED",
                  "status":"16",
                  "number":"91XXXXXXXXXX",
                  "date":"2015-06-10 17:09:32.0"
              }
          ],
          "senderId":"tester"
      },
      {  
          "requestId":"35666a716868323535323239",
          "userId":"38229",
          "report":[  
              {  
                  "desc":"REJECTED",
                  "status":"16",
                  "number":"91XXXXXXXXXX",
                  "date":"2015-06-10 17:09:32.0"
              },
              {  
                  "desc":"REJECTED",
                  "status":"16",
                  "number":"91XXXXXXXXXX",
                  "date":"2015-06-10 17:09:32.0"
              }
          ],
          "senderId":"tester"
      }
  ]

这里,responseText 为空白。请指出这段代码有什么问题。

谢谢

周杰伦

这是从您的供应商处接收数据的示例。

首先,您必须创建两个模型以按供应商格式获取数据:

public class Response
    {
        public string RequestId { get; set; }
        public string UserId { get; set; }
        public List<ResponseReport> Report { get; set; }
        public string SenderId { get; set; }
    }

    public class ResponseReport
    {
        public string Desc { get; set; }
        public int Status { get; set; }
        public string Number { get; set; }
        public DateTime Date { get; set; }

    }

这些模型是由您的 json 格式创建的

之后你必须创建一个处理程序来获取数据(首选 url)。

public class GetDelivery : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {


            var jsonSerializer = new JavaScriptSerializer();

            var jsonString = string.Empty;

            context.Request.InputStream.Position = 0;
            using (var inputStream = new StreamReader(context.Request.InputStream))
            {
                jsonString = inputStream.ReadToEnd();
            }

            var data = new List<Response>();
            data = jsonSerializer.Deserialize<List<Response>>(jsonString);


            //Modification and Saving Data

            context.Response.Write("OK");

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

在此处理程序中,您可以获取供应商发送给您的内容,您可以修改并保存它。

注意:数据模型和json格式必须相似

测试代码

最后,为了测试供应商发送的数据,您可以使用此代码:

<button id="send" class="CallHandler">Send</button>
    <script>

        $(".CallHandler").click(function () {
            alert('test');
            $.ajax({
                url: "GetDelivery.ashx",
                contentType: "application/json; charset=utf-8",
                type: 'POST',
                dataType: "json",
                data: JSON.stringify([
                    { "requestId": "35666a716868323535323239", "userId": "38229", "report": [{ "desc": "REJECTED", "status": "16", "number": "91XXXXXXXXXX", "date": "2015-06-10 17:09:32.0" }], "senderId": "tester" },
                    { "requestId": "35666a716868323535323239", "userId": "38229", "report": [{ "desc": "REJECTED", "status": "16", "number": "91XXXXXXXXXX", "date": "2015-06-10 17:09:32.0" }, { "desc": "REJECTED", "status": "16", "number": "91XXXXXXXXXX", "date": "2015-06-10 17:09:32.0" }], "senderId": "tester" }
                ]),

            });
            return false;
        });


    </script>

希望能让你满意。