c# - 除非首先枚举标头,否则 .NET Core HttpContext.Request.Headers.Remove() 不起作用
问题描述
我尝试httpContext.Request.Headers
通过运行以下语句从 中删除标头:
httpContext.Request.Headers.Remove("HeaderName");
这没有做任何事情,标题仍然存在于IHeaderDictionary
. 尝试了一段时间后,我注意到当我将其转换IHeaderDioctionary
为List
第一个时,标头已成功删除。
_ = 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;
};
})
}
解决方案
推荐阅读
- kubernetes - metrics-server 在部署期间没有已知 pod 错误的指标
- android - 无障碍服务不是上下文吗?
- javascript - 未捕获的 ReferenceError:未定义 dropdownFunc。Onclick 功能不起作用
- python - 我无法将时间戳转换为可读字符串
- faunadb - 如何加入动物群数据库中的收藏?
- javascript - 如何将数据从 Subject observable 推送到组件中的数组?
- flutter - Flutter setState()不触发重新构建
- angular - 如何在Angular中将参数传递给组件的templateUrl?
- vue.js - Vue - 将变量作为组件道具传递
- powerbi - DAX - 从过滤的 SUMMARIZE 公式中获取列表