下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C#通过HttpWebRequest发送带有JSONBody的POST请求实现目录起因
原来的处理方式
新的方式
起因
很多博客都有描述到这个问题,那么为什么我还要写一篇文章来说一下呢,因为其他的都似乎已经过时了,会导致其实body并没有发送过去。至于为什么不使用其他的诸如HttpClient之类的,是由于业务需要。
原来的处理方式
通过GetRequestStream来获取请求流,后把需要发送的Json数据写入到流中
privateTPostDataViaHttpWebRequestT(stringbaseUrl,
IReadOnlyDictionarystring,stringheaders,
IReadOnlyDictionarystring,stringurlParas,
stringrequestBody=null)
varresuleJson=string.Empty;
varapiUrl=baseUrl;
if(urlParas!=null)
urlParas.ForEach(p=
if(apiUrl.IndexOf("{"+p.Key+"}")-1)
apiUrl=apiUrl.Replace("{"+p.Key+"}",p.Value);
else
apiUrl+=string.Format("{0}{1}={2}",apiUrl.Contains("")"":"",p.Key,p.Value);
varreq=(HttpWebRequest)WebRequest.Create(apiUrl);
req.Method="POST";
req.ContentType="application/json";
req.ContentLength=0;
if(!requestBody.IsNullOrEmpty())
using(varpostStream=req.GetRequestStream())
varpostData=Encoding.ASCII.GetBytes(requestBody);
req.ContentLength=postData.Length;
postStream.Write(postData,0,postData.Length);
if(headers!=null)
if(headers.Keys.Any(p=p.ToLower()=="content-type"))
req.ContentType=headers.SingleOrDefault(p=p.Key.ToLower()=="content-type").Value;
if(headers.Keys.Any(p=p.ToLower()=="accept"))
req.Accept=headers.SingleOrDefault(p=p.Key.ToLower()=="accept").Value;
varresponse=(HttpWebResponse)req.GetResponse();
using(Streamstream=response.GetResponseStream())
using(StreamReaderreader=newStreamReader(stream,Encoding.GetEncoding("UTF-8")))
resuleJson=reader.ReadToEnd();
catch(Exceptionex)
returndefault(T);
returnJsonConvert.DeserializeObjectT(resuleJson);
}
但是会发现,数据一直没有正常发送过去,而且代码还显得比较复杂
新的方式
这里修改一下写入RequestStream的方式,使用StreamWriter包装一下,然后直接写入需要发送的Json数据
privateTPostDataViaHttpWebRequestT(stringbaseUrl,
IReadOnlyDictionarystring,stringheaders,
IReadOnlyDictionarystring,stringurlParas,
stringrequestBody=null)
varresuleJson=string.Empty;
varapiUrl=baseUrl;
if(urlParas!=null)
urlParas.ForEach(p=
if(apiUrl.IndexOf("{"+p.Key+"}")-1)
apiUrl=apiUrl.Replace("{"+p.Key+"}",p.Value);
else
apiUrl+=string.Format("{0}{1}={2}",apiUrl.Contains("")"":"",p.Key,p.Value);
varreq=(HttpWebRequest)WebRequest.Create(apiUrl);
req.Method="POST";
req.ContentType="application/json";//Defalt
if(!requestBody.IsNullOrEmpty())
using(varpostStream=newStreamWriter(req.GetRequestStream()))
postStream.Write(requestBody);
if(headers!=null)
if(headers.Keys.Any(p=p.ToLower()=="content-type"))
req.ContentType=headers.SingleOrDefault(p=p.Key.ToLower()=="content-type").Value;
if(headers.Keys.Any(p=p.ToLower()=="accept"))
req.Accept=headers.SingleOrDefault(p=p.Key.ToLower()=="accept").Value;
varresponse=(HttpWebResponse)req.GetResponse();
using(Streamstream=response.GetResponseStream())
using(StreamReaderreader=newStreamReader(stream,Encoding.GetEncoding("UTF-8"))
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 语文学科核心素养观照下的小学习作教学衔接策略
- 2026三年级数学上册 两位数乘一位数口算
- 2026二年级数学 北师大版儿童乐园时间认识
- 护理感染预防的实践指南
- 打架斗殴责任制度
- 扫黑除恶主体责任制度
- 承销商法律责任制度
- 抗震质量责任制度
- 护路联防部门责任制度
- 指挥中心工作责任制度
- 第一单元《写作:考虑目的和对象》八年级语文下册同步课件(统编版新教材)
- 2025~2026学年新版教科版六年级下册科学教学计划
- 2026上海烟草机械有限责任公司招聘9人笔试参考题库及答案解析
- 2026银行间市场数据报告库(上海)股份有限公司招聘30人笔试参考题库及答案解析
- 2026年吉安幼儿师范高等专科学校单招综合素质考试题库含答案详解(巩固)
- 电梯应急处置预案和应急救援措施方案
- 妇科妇科肿瘤靶向治疗护理
- 2026及未来5年中国凝血酶行业市场供需态势及未来趋势研判报告
- 雨课堂学堂在线学堂云《短视频创意与制作(北京邮电)》单元测试考核答案
- (2026年)心理健康中小学生主题班会课件
- 2024年首都医科大学辅导员招聘考试真题汇编附答案
评论
0/150
提交评论