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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?