.Net Core 3.1 如何实现HTTP POST请求头与请求体的分开发送
.NET Core 3.1 实现HTTP请求头与请求体分开发送的方案
直接使用官方推荐的HttpClient类实现需求,不要使用已废弃的HttpWebRequest类,后者在.NET Core中为兼容层实现,相关配置项已不生效,具体操作如下:
全局统一开启Expect 100-continue行为
- 构造
HttpClient时传入自定义配置的SocketsHttpHandler,开启Expect100Continue配置,可根据旧服务器响应速度调整超时时间:
var handler = new SocketsHttpHandler { Expect100Continue = true, // 等待服务器返回100-continue响应的超时时间,默认1秒 ContinueTimeout = TimeSpan.FromSeconds(3) }; var httpClient = new HttpClient(handler); // 后续正常发送POST请求即可,框架会自动先发送请求头,收到100-continue响应后再发送请求体
单个请求单独开启
如果不需要全局生效,可仅在指定请求的头配置中开启:
// 此处httpClient为普通构造的实例,无需特殊配置 var request = new HttpRequestMessage(HttpMethod.Post, "旧服务器接口地址") { Content = new StringContent("请求体内容", Encoding.UTF8, "application/json") // 可替换为其他Content类型,比如FormUrlEncodedContent、MultipartFormDataContent等 }; // 单独给当前请求开启Expect 100-continue request.Headers.ExpectContinue = true; // 发送请求 var response = await httpClient.SendAsync(request);
注意事项
- 若旧服务器未正确返回100-continue响应,
HttpClient在等待ContinueTimeout时长后会自动发送请求体,不会永久阻塞,可根据实际情况调整超时参数避免异常。
内容的提问来源于stack exchange,提问作者user15123902
相关产品推荐
相关产品推荐

