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

.NET Framework服务HTTP请求异常:UTF-8不是有效编码名称

问题描述

在.NET Framework服务中发起HTTP请求时,多数客户端运行正常,但特定场景下抛出异常。转译后的错误信息为:

"The character set provided in the ContentType is invalid."……"UTF-8 is not a valid encoding name."

相关代码片段:

requestMessage.Content = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");

TaskAwaiter<HttpResponseMessage> response;
try
{
    response = HTTPClient.SendAsync(requestMessage).GetAwaiter();
}
catch (Exception e)
{
    throw new CDBAPIException($"Falha POST {url}", e);
}
try
{
    var result = response.GetResult();
    if (result.StatusCode != System.Net.HttpStatusCode.OK)
    {
        throw new CDBAPIException($"Falha POST {result.StatusCode} - {result.ReasonPhrase}");
    }

    var content = response.GetResult().Content.ReadAsStringAsync().GetAwaiter();
    dynamic updates = JsonConvert.DeserializeObject(content.GetResult());
}
解决方案
  • 显式指定带字符集的ContentType
    直接在ContentType中明确添加charset=utf-8,避免框架在特定环境下对编码名称的解析偏差:

    requestMessage.Content = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json; charset=utf-8");
    
  • 手动注册编码提供者
    若服务器本地化配置异常,可能导致系统未正确注册UTF-8编码。可在程序启动时手动注册编码:

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    

    注意需先安装System.Text.Encoding.CodePages NuGet包。

  • 优化重复调用问题
    原代码中多次调用response.GetResult()属于冗余操作,建议缓存结果避免潜在风险:

    var result = response.GetResult();
    if (result.StatusCode != System.Net.HttpStatusCode.OK)
    {
        throw new CDBAPIException($"Falha POST {result.StatusCode} - {result.ReasonPhrase}");
    }
    
    var content = result.Content.ReadAsStringAsync().GetAwaiter();
    dynamic updates = JsonConvert.DeserializeObject(content.GetResult());
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:05:11