ASP.NET Core 默认不支持 XML 响应,需在 Program.cs 中调用 AddXmlSerializerFormatters() 注册,并在控制器方法添加 [Produces("application/xml")] 特性,客户端请求头需含 Accept: application/xml。
ASP.NET Core 默认不启用 XML 响应支持,需手动配置才能让 API 返回 XML 格式(如 application/xml),尤其在对接传统系统或满足特定协议要求时很有用。
在 Program.cs 中注册 XML 支持:
AddXmlSerializerFormatters() 或 AddXmlDataContractSerializerFormatters()
XmlSerializer,更常用;后者基于 DataContractSerializer,适合 WCF 兼容场景示例(.NET 6+):
builder.Services.AddControllers()
.AddXmlSerializerFormatters(); // 启用 XmlSerializer 支持
确保控制器方法返回可序列化的对象(如 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 对类成员有要求:

[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 处理。