2016-04-30 22 views
0

我的SMS公司有一些Webhook方法发送传递报告到我们的首选url,那么我们必须从该网址获取数据并将其更新为日志。如何获得json字符串作为响应使用Webhook在asp.net c#Webforms

对于这一点,我使用下面的代码:

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格式来作为每条短信供应商在如下图所示:

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的空白。请提出这个代码有什么问题。

感谢

周杰伦

+0

我不明白为什么你创建WebRequest来读取响应?你说公司把发送报告发送到我们首选的网址,所以你可以在你的网址获取数据,而不是webrequest.Am我是对的? –

+0

可能会,但我很困惑。即使这些代码是作为样本发送的。我只是根据需要修改它。 – jaykhatri

+0

当他们发送任何格式的数据,你可以得到它并修改它。 例如,他们发送一个json结果到你的url,并且web服务器解析它们请求的(用参数打开页面),然后你可以修改数据并保存它。 –

回答

1

这是从供应商处receiveing数据的示例。

首先,你必须通过供应商格式获取的数据创建两个模型:

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格式

后创建你必须创建用于获取数据的处理(首选网址)。

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> 

我希望它能让你满意。

+0

我需要将来自首选url的数据串联起来,请让我知道我该如何实现这一点。 – jaykhatri

+0

您喜欢的网址是http://YourWebsite.com/GetDelivery.ashx,当您的供应商将数据以json格式发送到此地址时,处理程序处理te请求并保存数据 –

+0

{“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”}将是一个例子,我应该写些什么来代替 – jaykhatri

相关问题