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

如何修改ASP.NET Core 6.0 Web API默认响应Content-Type不含charset?

解决ASP.NET Core 6.0 Web API响应Content-Type带charset的问题

你的ASP.NET Core 6.0 Web API实现了幂等层做请求缓存重放,但默认响应的Content-Type是application/json; charset=utf-8,导致重放时无法匹配SystemTextJsonOutputFormatter(它只识别application/json)。你之前的临时方案是给格式化器添加带charset的媒体类型,但这不是根治办法,以下是彻底解决的方法:

根治方案:禁用格式化器的Charset输出

SystemTextJsonOutputFormatter继承自TextOutputFormatter,后者的UseCharset属性默认是true——这就是响应自动带charset=utf-8的原因。只要把这个属性设为false,就能让响应的Content-Type只保留application/json:

builder.Services.AddControllers(options =>
{
    var jsonFormatter = options.OutputFormatters
        .OfType<SystemTextJsonOutputFormatter>()
        .FirstOrDefault();
    
    if (jsonFormatter != null)
    {
        // 关闭自动添加charset后缀
        jsonFormatter.UseCharset = false;
    }
});

这么设置后,后续所有JSON响应的Content-Type都会是标准的application/json,完全符合SystemTextJsonOutputFormatter的识别规则,幂等层重放时就不会再出现匹配失败的问题。

为什么临时方案不是根治?

你之前给格式化器添加application/json; charset=utf-8到支持列表,只是让格式化器能兼容带charset的响应,但并没有从根源上阻止响应生成带charset的头——新的响应依然会带这个后缀,后续可能还会遇到其他兼容性问题。而禁用UseCharset是从源头切断charset的生成,彻底解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:03:16