HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

Intro

这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebReauest,但是 WebRequest 已经不再推荐使用了,你如果在项目中使用的话,编译器会警告, WebRequest已过时,新项目要 .Net standard 重写就直接 HttpClient 来处理 HTTP 请求了,在改的过程中踩了几个坑,记录一下

请求头处理

HttpClient 通常如果要添加请求头的话。一般这样添加:

 var requestMessage = new HttpRequestMessage(_httpMethod, requestUrl)
 {
       Content = new StringContent(postData, Encoding.UTF8, "appplication/json")
 };
 //
requestMessage.Headers.TryAddWithoutValidation("Date", date);

但是有些请求头这样加是可以的,但是有些请求头就不行了,这次就遇到了两个例外,一个是 Content-Type,一个是 Content-MD5 这两个请求头。

设置请求头 Content-Type

正确姿势:

requestMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(ContentType);

设置请求头 Content-MD5

正确姿势:

requestMessage.Content.Headers.TryAddWithoutValidation("Content-MD5", contentMD5);

Reference

原文地址:https://www.cnblogs.com/weihanli/p/10258302.html

时间: 01-11

HttpWebRequest 改为 HttpClient 踩坑记-请求头设置的相关文章

踩坑记:httpComponents 的 EntityUtils

今天写的一个服务程序,有人报告获得的数据中文乱码,而我是用 apache 通过 httpComponents 去取得数据的,于是开启日志的 debug 级别. 在日志里果然发现中文不见了,有乱码出现: 2014-07-02 16:35:01.348 DEBUG [Wire.java:86] http-outgoing-8 << "<?xml version="1.0" encoding="UTF-8"?>... subject=&q

断点下载的请求头设置

断点下载的时候,需要设置请求头的“Range” 表示头100个字节:Range:bytes=0-99 表示第二个100个字节:Range:bytes=100-199 表示最后100个字节:Range:bytes=-100 表示200个字节以后的所有字节:Range:bytes=200-

spring mvc踩坑记

前言 主要介绍自己在学习spring mvc过程中踩到的一些坑,涉及到当时遇到这个错误是如何思考的,对思路进行总结,下次遇到类似的错误能够提供一些思路甚至快速解决. 环境准备 jdk8,spring4.3.3.RELEASE,spring mvc与spring版本一致,maven3.2.5,tomcat7 目标: 1.测试spring mvc的json参数绑定功能 2.测试spring mvc的返回json功能 项目目录(已经推送到github:https://github.com/Coming

踩坑记(1)——使用slf4j+logback记录日志

jar包版本: <spring.version>3.1.0.RELEASE</spring.version> <slf4j.version>1.7.25</slf4j.version> <logback.version>1.2.3</logback.version> <logback.ext.version>0.1.1</logback.ext.version> commons-logging:scope为pr

Linq多表查询 返回组合实体 踩坑记

新年就不再记流水账了吧,无关紧要的日志太多也不好,有时要找自已记录的一些要点要翻半天 春节假期在家陆陆续续也有在做公司的事,主要是重构,接手的代码看着比较乱,花了很多时间来重构,现在看上去好多了. 使用Linq进行多表查询,要返回各个表的几个组合数据, public class A{ public string NameA{get; set;} } public class B{ public string NameB{get; set;} } 1.原先项目是定义了一个类,里面包含几张表的各个字

iptables踩坑记

1:第一坑:众所周知nf_conntrack,下面会有介绍补坑方法. 2:连环坑: 要解决第一个坑,需要修改内核参数,如: net.netfilter.nf_conntrack_tcp_timeout_established = 600 net.netfilter.nf_conntrack_max = 1048576 net.nf_conntrack_max = 1048576 这几个参数是基于nf_conntrack模块的,如果nf_conntrack在系统中没有被加载,则上面三个选项就恢复成

form表单提交踩坑记

今天收获了一次集团故障,心塞不已,究其原因,是form表单提交时web服务器对大小做了限制.这个必现的问题在测试阶段也不知为啥没测出来,项目太紧张,赶出来的东西果然质量没有保证. pc端和H5是两套逻辑.pc端直接提交的file,在webx中设置了单个文件不超过2M,总的不超过6M.刚提测不久,就提了bug,传大文件时服务端返回不正确.经过检查,发现在文件超过3M的时候服务端返回403.诡异的是,应用中并没有返回这个错误响应,打断点也总是不中.度娘后才发现,这是nginx报的错,咨询PE,把ng

Android Studio踩坑记

1. 模拟器在管理器中可以运行,但是点击run时死活找不到:    在sdk的/platform-tools/目录下找到adb.exe工具    打开cmd,输入下面两条命令    adb kill-server    adb start-server 能启动就可以run了,不能启动一般是端口被占用,想办法杀掉.

Visual Studio For MacOS .NetCore开发踩坑记

自从Visual Studio For  MacOS公布以来,就开始尝试在Mac上进行net core开发.断断续续遇到了各种奇奇怪怪的问题.虽然大部分利用google查查(百度屁都查不出来),都能找到解决方案,但还是做个记录吧~ 问题一: 错误提示:error MSB4057: The target "Build" does not exist in the project 记录时间:2017-03-31 原因解析:Mono版本低了.对,就是Mono版本低了,别问我为什么开发netc

redis踩坑记

本来打算给一批主库做从库,用来读取数据,还不想碰主库数据. 主库redis2.8.12,从库一开始没注意,docker了一个3.1的,结果slaveof之后命令不兼容,下了一个2.8的(2.8.23好像),还是不兼容. 最后github编译了一个2.8.12 保持小版本一致,才算是能同步了 然后 I/O error reading bulk count from MASTER错误 此时,两个主机并没有流量 主库没日志,好不容易要到主库机器密码,配置了日志,发现主库打这样的日志: psync sc