【问题标题】:ASP.NET Core Modify HTTP Request Headers using MiddlewareASP.NET Core 使用中间件修改 HTTP 请求标头
【发布时间】: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


【解决方案1】:

因此,当发出请求和发回响应时,中间件会受到影响。实际上,这意味着您可以像这样通过 Invoke 方法两次:

public async Task Invoke(HttpContext context)
{
  ModifyRequest(context);
  await _next(context);
  ModifyResponse(context);
}

所以你可以修改ModifyResponse方法中的响应。

微软的文档会更清楚:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-2.1

希望这会有所帮助。

【讨论】:

  • 但我的问题是 Invoke 没有被调用。
  • 嗯。我以前在共享项目中遇到过这个问题。是其他人的中间件没有调用next,因此最终导致管道中的中间件短路。
【解决方案2】:

您是否在 DI 系统中注册了您的中间件?你需要在你的Startup 类,ConfigureServices 方法中这样做:

services.AddScoped<IMiddleware, SomeMiddleware>();

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 2011-10-21
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多