首页 > 解决方案 > 除非首先枚举标头,否则 .NET Core HttpContext.Request.Headers.Remove() 不起作用

问题描述

我尝试httpContext.Request.Headers通过运行以下语句从 中删除标头:

httpContext.Request.Headers.Remove("HeaderName");

这没有做任何事情,标题仍然存在于IHeaderDictionary. 尝试了一段时间后,我注意到当我将其转换IHeaderDioctionaryList第一个时,标头已成功删除。

_ = httpContext.Request.Headers.ToList();
httpContext.Request.Headers.Remove("HeaderName");

另一种方法是首先检查密钥是否存在。该.ContainsKey()方法枚举IHeaderDictionary,这使得.Remove()工作。

if (context.Request?.Headers?.ContainsKey("HeaderName") ?? false)
{
  context.Request.Headers.Remove("HeaderName");
}

现在,当我的代码运行并执行我想要它做的事情时,我想知道为什么有必要首先枚举IHeaderDictionary? 有没有更好的方法来实现这一目标?

要添加更多上下文,以下是我如何将 传递httpContext给我的方法Startup.cs

// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services
        .AddAuthentication(options =>
        {
            options.DefaultScheme = "default";
            options.DefaultChallengeScheme = "default";
        })
        .AddPolicyScheme("default", "default", options =>
        {
            options.ForwardDefaultSelector = context =>
            {
                // in this async method I remove the header
                return schemeService.GetSchemeAsync(context).Result;
            };
        })
}

标签: c#asp.net-core.net-5

解决方案


推荐阅读