【问题标题】:.Net Core 3.1 - HTTP request - Send header and body separately.Net Core 3.1 - HTTP 请求 - 分别发送标头和正文
【发布时间】:2021-09-11 11:31:11
【问题描述】:

我使用的是旧版服务器,它要求 HTTP POST 请求中的标头和正文分别发送。我想这是通过 'Expect: 100-continue' 实现的,它存在于旧版的客户端消息头中。

我正在使用 Net Core 3.1 编写新客户端,它似乎不支持 HttpWebRequest 类中的 Expect100Continue(根据:https://github.com/dotnet/runtime/issues/25881)

有没有可能用 Net Core 3.1 发送 HTTP 请求,正文和标头分开?

【问题讨论】:

  • 服务器默认为 http 1.1 而 net 没有发送 100 继续。解决方案是让 Net 客户端将标头发送到服务器命令以从默认的 http 1.1 更改为 http 1.0。使用以下代码: HttpWebRequest request = (HttpWebRequest) WebRequest.Create("URI"); request.ProtocolVersion = HttpVersion.Version10;
  • HttpWebRequest 已弃用,请改用 HttpClient,无论是用于 HTTP/1.0

标签: c# .net-core httprequest


【解决方案1】:

快速解决方案是关闭 net core 的 HTTP 处理程序

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);

在此切换之后,将使用来自 .net 框架的处理程序。看起来 SocketsHttpHandler(至少与 HttpWebRequest 结合使用)不支持分离的标头和正文,即使使用 HTTP 1.0 也是如此。

https://docs.microsoft.com/en-us/dotnet/api/system.appcontext.setswitch?view=netcore-3.1

【讨论】:

  • 自己解决问题总是很好的。感谢您的更新。
猜你喜欢
  • 2020-04-21
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2023-04-01
  • 2015-02-18
  • 2023-03-10
相关资源
最近更新 更多