ASP.NET Core 默认不支持 XML 响应,需在 Program.cs 中调用 AddXmlSerializerFormatters() 注册,并在控制器方法添加 [Produces("application/xml")] 特性,客户端请求头需含 Accept: application/xml。

ASP.NET Core 默认不启用 XML 响应支持,需手动配置才能让 API 返回 XML 格式(如 application/xml),尤其在对接传统系统或满足特定协议要求时很有用。
启用 XML 输出格式化器
在 Program.cs 中注册 XML 支持:
- 调用
AddXmlSerializerFormatters()或AddXmlDataContractSerializerFormatters() - 前者基于
XmlSerializer,更常用;后者基于DataContractSerializer,适合 WCF 兼容场景
示例(.NET 6+):
builder.Services.AddControllers()
.AddXmlSerializerFormatters(); // 启用 XmlSerializer 支持
控制器返回 XML 响应
确保控制器方法返回可序列化的对象(如 POCO 类),并添加 [Produces("application/xml")] 特性声明输出类型:
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet]
[Produces("application/xml")]
public IActionResult Get() => Ok(new Product { Id = 1, Name = "Laptop" });
}
客户端需在请求头中指定 Accept: application/xml,否则仍可能返回 JSON(取决于内容协商结果)。
注意序列化行为和兼容性
XmlSerializer 对类成员有要求:
- 只序列化 公共读写属性(字段不支持)
- 类必须有无参构造函数
- 若需自定义 XML 节点名或忽略某属性,可用
[XmlElement("CustomName")]或[XmlIgnore]
例如:
public class Product
{
public int Id { get; set; }
[XmlElement("ProductName")]
public string Name { get; set; }
[XmlIgnore]
public DateTime CreatedAt { get; set; }
}
调试与验证
使用 curl 或 Postman 测试时,务必设置 Accept 请求头:
curl -H "Accept: application/xml" https://localhost:5001/api/products
若返回 406 Not Acceptable,检查是否遗漏注册 XML 格式化器,或控制器未正确标注 [Produces],或返回对象不可被 XmlSerializer 处理。










