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

如何在C#.NET API中移除JSON响应的XML包裹头

解决C#.NET API返回JSON被XML头包裹的问题

以下是几种直接有效的解决方式,根据你的项目类型选择适配方案:

1. 全局禁用XML格式化器(ASP.NET Core/.NET 6+)

在Program.cs中配置服务时,移除XML相关的输出格式化器,强制API默认返回JSON:

builder.Services.AddControllers(options =>
{
    // 移除两种XML格式化器
    options.OutputFormatters.RemoveType<XmlDataContractSerializerOutputFormatter>();
    options.OutputFormatters.RemoveType<XmlSerializerOutputFormatter>();
})
.AddJsonOptions(options =>
{
    // 按需配置JSON序列化规则,比如小驼峰命名
    options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});

如果需要保留XML格式化能力但强制优先返回JSON,可以改为:

builder.Services.AddControllers(options =>
{
    options.RespectBrowserAcceptHeader = false; // 忽略请求的Accept头,不做内容协商
    options.ReturnHttpNotAcceptable = true;
    // 将JSON格式化器移到最前面,设为默认
    var jsonFormatter = options.OutputFormatters.OfType<SystemTextJsonOutputFormatter>().First();
    options.OutputFormatters.RemoveType<SystemTextJsonOutputFormatter>();
    options.OutputFormatters.Insert(0, jsonFormatter);
});

2. 控制器/Action级别强制返回JSON

在控制器或单个Action上添加[Produces("application/json")]特性,明确指定输出格式:

[ApiController]
[Route("api/[controller]")]
[Produces("application/json")] // 该控制器下所有Action默认返回JSON
public class DataController : ControllerBase
{
    [HttpGet]
    public IActionResult GetJsonData()
    {
        var responseData = new { Id = 123, Content = "示例数据" };
        // 两种返回方式都可以:明确返回JsonResult,或用Ok()配合Produces特性
        return Json(responseData);
        // return Ok(responseData);
    }
}

3. 检查并移除XML相关中间件

排查Program.cs中是否存在注册XML处理中间件的代码(比如app.UseXmlSerializer()),如果有直接移除即可。

验证方法:调用API后查看响应头的Content-Type,确认值为application/json,同时检查响应内容是否为纯JSON文本,无XML头包裹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:55:31