【发布时间】:2018-10-13 12:40:35
【问题描述】:
我需要做的就是将[Connection] HTTP Header 从“Keep-alive”修改为小写“keep-alive”。
我写了这门课,
public class PreRequestModifications
{
private readonly RequestDelegate _next;
public PreRequestModifications(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
// Does not get called when making an HTTPWebRequest.
await _next.Invoke(context);
}
}
并在启动时注册,
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMiddleware<PreRequestModifications>();
}
但是当我执行await httpWebRequest.GetResponseAsync(); 时,Invoke 方法不会被调用
【问题讨论】:
-
该中间件处理传入 Web 服务器的请求。这是从您的服务器代码到另一台服务器的传出 http 请求吗?如果没有,您能否准确说明您要修改哪个标头。
-
@sellotape 是的,我需要修改传出请求。
-
那与您当时所指的中间件无关。假设您使用的是
HttpWebRequest,则该标头是在发送之前添加的,没有可用于更改它的钩子。您可以尝试设置.KeepAlive = false;,它应该停止添加标头,然后在发送之前添加您自己的标头,但是......在幕后使用保持活动连接不仅仅是这个标头。它还引出了为什么您调用的服务器需要它的问题;所有的 HTTP 规范都提到了“Keep-Alive”。 -
仅供参考 .KeepAlive = false; + 添加我自己的将导致合并标题 Connection: keep-alive, close
-
@realPro - 是的,如果
KeepAlive为假,它将添加“关闭”。请参阅源代码here - 第 5047 行。您似乎无能为力。我会向您调用的服务器的提供商投诉。
标签: c# asp.net-core httprequest middleware system.net.httpwebrequest