You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#控制台调用Web API遇无效标头异常,useUnsafeHeaderParsing配置困惑

解决C#控制台调用Web API时的Invalid Header异常

问题原因

服务器返回的HTTP Strict-Transport-Security头内容不符合HTTP规范(该头用于强制HTTPS,正确格式应为max-age=xxx类内容,但服务器返回了属于CSP策略的default-src 'self';),导致HttpClient默认的严格头解析逻辑抛出异常。

解决方案

方案1:代码直接启用不安全头解析(推荐)

在创建HttpClient实例前,通过AppContext设置开关跳过严格的头解析验证,适用于.NET Core/.NET 5+及.NET Framework:

// 在HttpClient初始化前添加这行代码
AppContext.SetSwitch("System.Net.Http.UseUnsafeHeaderParsing", true);

HttpClient httpClient = new HttpClient();
// 建议使用await而非Wait()避免死锁风险
var response = await httpClient.GetAsync("http://MYAPI");

注意:替换Wait()为await可以避免AggregateException嵌套及潜在死锁问题。

方案2:通过appsettings.json配置控制

如果需要通过配置文件开关控制解析行为,可在appsettings.json中添加配置项:

{
  "AppSettings": {
    "EnableUnsafeHeaderParsing": true
  }
}

然后在代码中读取配置并设置开关:

// 加载配置文件
var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

// 读取配置并设置开关
if (bool.TryParse(config["AppSettings:EnableUnsafeHeaderParsing"], out bool enableUnsafe) && enableUnsafe)
{
    AppContext.SetSwitch("System.Net.Http.UseUnsafeHeaderParsing", true);
}

HttpClient httpClient = new HttpClient();
var response = await httpClient.GetAsync("http://MYAPI");

针对.NET Framework控制台项目的配置文件方式

如果是基于.NET Framework的项目,可通过app.config配置:

<configuration>
  <system.net>
    <settings>
      <!-- 启用不安全头解析 -->
      <httpWebRequest useUnsafeHeaderParsing="true" />
    </settings>
  </system.net>
</configuration>

.NET Core/.NET 5+项目不支持此配置方式,强行添加会导致运行时异常,这也是你之前遇到问题的原因。

内容的提问来源于stack exchange,提问作者Leela Manjunath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:31:16