zoukankan      html  css  js  c++  java
  • WebService 接收JSON字符串

      晚上学习时公司的同事,暂且叫A吧,A:“我们公司XXX纺织的AM接口不通,让我看下”,我:“接口写的不是有AJAX异步请求的示例嘛,参考下,我都测试过接口,都是通的。”,A:“我走的不是AJAX,走的CS端”,我:“哦,明白了,CS端的HttpWebRequest模拟前端的AJAX请求,我之前写过一次,我写个DEMO调试看看”

    排查结果如下

    错误示例,因为CS没法前面加前缀:jsonData

    正确的AJAX示例,前面有jsonData(因为后台获取的是jsonData中的数据,CS端这个没法传)

     

    网上找了半天解决方法,我们可以使用上下文,获取JSON数据流,然后在将流还原回JSON字符串即可

    1             Stream s = HttpContext.Current.Request.InputStream;//获得json 字符流
    2             //还原数据流
    3             byte[] b = new byte[s.Length];
    4             s.Read(b, 0, (int)s.Length);
    5             string jsontext = Encoding.UTF8.GetString(b); //JSON字符串

     

    cs端HttpWebRequest示例

     1         private void button1_Click(object sender, EventArgs e)
     2         {
     3             string res = PostWebRequest("http://XXXXXXX/webService/eCimsService.asmx/GetHullParts", "{"ProjNo":"H001","SectionNo":"C002",Data:[]}", Encoding.UTF8);
     4         }
     5         /// <summary>
     6         /// Post数据接口
     7         /// </summary>
     8         /// <param name="postUrl">接口地址</param>
     9         /// <param name="paramData">提交json数据</param>
    10         /// <param name="dataEncode">编码方式(Encoding.UTF8)</param>
    11         /// <returns></returns>
    12         private static string PostWebRequest(string postUrl, string paramData, Encoding dataEncode)
    13         {
    14             string responseContent = string.Empty;
    15             try
    16             {
    17                 byte[] byteArray = dataEncode.GetBytes(paramData); //转化
    18                 HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
    19                 webReq.Method = "POST";
    20                 webReq.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
    21                 webReq.Accept = "*/*"; //注:调试的过程中,报415,这里可能需要修改下
    22                 webReq.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36";
    23                 webReq.ContentLength = byteArray.Length;
    24                 using (Stream reqStream = webReq.GetRequestStream())
    25                 {
    26                     reqStream.Write(byteArray, 0, byteArray.Length);//写入参数
    27                     //reqStream.Close();
    28                 }
    29                 using (HttpWebResponse response = (HttpWebResponse)webReq.GetResponse())
    30                 {
    31                     using (Stream myResponseStream = response.GetResponseStream())
    32                     {
    33                         using (StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8))
    34                         {
    35                             responseContent = myStreamReader.ReadToEnd().ToString();
    36                         }
    37                     }
    38                 }
    39             }
    40             catch (Exception ex)
    41             {
    42                 return ex.Message;
    43             }
    44             return responseContent;
    45         }
  • 相关阅读:
    windows,linux,esxi系统判断当前主机是物理机还是虚拟机?查询主机序列号命令 风行天下
    zabbix监控网络的出入口流量 风行天下
    python 编写远程连接服务器脚本 风行天下
    zabbix 监控windows端cpu使用率百分比 风行天下
    linux计划任务crontab的使用 风行天下
    cd
    rm
    cp
    Windows XP和Windows 7双系统安装和启动菜单修复
    MapInfo、ArcGIS 狙击战 1
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/11312704.html
Copyright © 2011-2022 走看看