晚上学习时公司的同事,暂且叫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 }