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

如何解决System.Net.Http.dll中抛出的System.FormatException异常?

解决System.FormatException异常方案

核心问题分析

你遇到的System.FormatException大概率是因为手动添加Content-Type请求头的方式不规范,.NET的HttpHeaders对特殊头的格式校验严格,直接使用Add方法可能触发格式验证失败,哪怕注释掉其中一行也无法解决。

修复步骤

  1. 替换Content-Type的设置方式:
    不要使用Headers.Add手动添加Content-Type,而是通过StringContent的构造函数直接指定,或者使用content.Headers.ContentType属性设置——这两种方式会自动处理头的格式规范,避免校验错误。

  2. 移除重复的Content-Type头:
    text/json是非标准的JSON媒体类型,标准类型是application/json,只需要保留后者即可。

修改后的完整代码

private void Dial(object sender, RoutedEventArgs e)
{
    // 异步方法调用需避免上下文脱离,此处用丢弃运算符处理无返回值场景
    _ = SendDataAsync(sender, e);
}

private async Task SendDataAsync(object sender, RoutedEventArgs e)
{   
    var toSend = new Dictionary<string, string>
    {
        { "ClientID", ConfigurationManager.AppSettings["ClientID"] ?? string.Empty },
        { "PhoneNumber", numberToSend ?? string.Empty }
    };

    string jsonString = JsonSerializer.Serialize(toSend);

    // 方式1:构造函数直接指定编码与媒体类型(推荐)
    var content = new StringContent(jsonString, Encoding.UTF8, "application/json");

    // 方式2:通过ContentType属性设置(二选一即可)
    // content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    var response = await client.PostAsync("https://webhook.site/4788266d-9caf-4747-a3d2-09777b233435", content);
    var responseString = await response.Content.ReadAsStringAsync();
}

额外注意事项

  • 原代码中Dial方法调用异步方法未使用await,会导致异步操作脱离上下文,可能引发不可预期的线程问题,建议按示例处理。
  • 给ClientID和PhoneNumber添加空值判断,避免序列化出无效JSON。
  • 确保HttpClient实例client是正确初始化的(推荐单例模式创建,避免频繁实例化)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:47:37