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

ASP.NET Core 8 Web API无法返回XML,请求XML时出现406错误

解决ASP.NET Core 8 Web API URL后缀返回XML时406错误的问题

常见原因及修复方案

1. 模型不满足XmlSerializer的序列化要求

XmlSerializer对模型有严格的序列化规则,一旦不满足就会触发406错误:

  • 必须有无参公共构造函数
  • 需要序列化的属性必须是公共可读写的
  • 存在循环引用时,需用[XmlIgnore]标记循环引用属性,或者换用其他序列化器

示例修正后的模型:

public class SampleModel
{
    // 必须添加无参构造函数
    public SampleModel() { }

    public int Id { get; set; }
    public string Name { get; set; }
    // 标记循环引用属性为忽略序列化
    [XmlIgnore]
    public SampleModel Parent { get; set; }
}

2. 路由未配置格式后缀占位符

控制器路由模板必须包含{format?},否则FormatFilter无法识别URL后缀中的格式标识:

控制器代码示例:

[ApiController]
[Route("api/[controller]/{id}.{format?}")] // 必须包含{format?}占位符
[FormatFilter]
public class SampleController : ControllerBase
{
    [HttpGet]
    public IActionResult Get(int id)
    {
        var model = new SampleModel { Id = id, Name = "Test Sample" };
        return Ok(model);
    }
}

3. XML格式器配置不完整或冲突

在Program.cs中需确保XML格式器被正确注册,且没有被后续配置覆盖:

Program.cs示例:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers(options =>
{
    // 显式绑定格式后缀与对应媒体类型
    options.FormatterMappings.SetMediaTypeMappingForFormat("xml", MediaTypeHeaderValue.Parse("application/xml"));
    options.FormatterMappings.SetMediaTypeMappingForFormat("json", MediaTypeHeaderValue.Parse("application/json"));
})
.AddXmlSerializerFormatters(); // 关键:添加XML序列化格式器

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

4. 替换为XmlDataContractSerializer

如果你的模型无法满足XmlSerializer的要求(比如无法添加无参构造函数),可以改用XmlDataContractSerializer:

在Program.cs中替换格式器配置:

builder.Services.AddControllers()
    .AddXmlDataContractSerializerFormatters();

验证步骤

  1. 修正配置后重启API服务
  2. 调用https://localhost:44347/api/Sample/1.xml检查返回结果
  3. 若仍有问题,可查看请求头的Accept字段——虽然FormatFilter优先URL后缀,但如果Accept被强制设置为application/json,可能会影响结果,可临时移除该头再测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:32:34