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

Asp.Net Core 2.0 API返回text/html响应解决406错误方法

解决ASP.NET Core 2.0 API返回text/html响应的406错误问题

我来帮你搞定这个问题——你遇到的406 Not Acceptable错误,本质是因为ASP.NET Core默认的Ok()方法处理字符串时,会自动把它当作JSON来序列化,设置响应的Content-Type为application/json。如果客户端的请求头Accept没有包含这个类型,就会触发406错误。

最简单的解决方案:使用ContentResult替换Ok()

直接用Content()方法返回响应,它允许你明确指定Content-Type,完美适配你的需求:

修改你的方法最后一行:

// 替换原来的 return Ok(jsonstring);
return Content(jsonstring, "text/html; charset=utf-8");

修改后的完整代码示例

[HttpGet("api/scoInfo/")]
public async Task<IActionResult> GetScoInfo([FromQuery]int activityId, [FromQuery]int studentId, [FromQuery] long timeStamp)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var learningTask = await _context.LearningTasks.SingleOrDefaultAsync(m => m.Id == activityId);
    if (learningTask == null)
    {
        return NotFound();
    }

    var jsonstring = learningTask.Data; 
    // 直接返回text/html类型的响应
    return Content(jsonstring, "text/html; charset=utf-8");
}

为什么原来的.NET 4.6.1代码可行?

在旧的ASP.NET Web API中,StringContent会直接将你指定的Content-Type附加到响应上,框架不会额外干预。但ASP.NET Core的Ok()方法依赖于格式化器系统(默认是JSON格式化器),即使你传入的是字符串,它也会按JSON规则处理,导致Content-Type被设置为application/json,从而引发406错误。

额外说明:如果需要全局配置(不推荐单个API场景)

如果你的多个API都需要返回text/html,可以全局配置格式化器,但这种方式会影响所有响应,所以只适合统一需求的场景:

// 在Startup.cs的ConfigureServices方法中添加
services.AddMvc(options =>
{
    options.OutputFormatters.Add(new StringOutputFormatter());
})
.AddJsonOptions(options =>
{
    // 保留你的JSON配置
});

不过对于单个API来说,用Content()方法是最直接、最灵活的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:12:41