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

Asp.Net Core中Swagger无法接收XML格式数据的问题排查

解决ASP.NET Core接口收不到XML数据的问题

问题出在哪

你用object当[FromBody]的参数类型,XML序列化器不像JSON那样能自动处理匿名类型,它得明确知道要转成什么具体类;另外你当前的XML格式化器配置也不够完善。

具体解决步骤

1. 先建个对应XML结构的实体类

别用object了,写个和你XML结构匹配的类:

public class ValuesModel
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }
    public string Value3 { get; set; }
}

然后修改控制器方法的参数:

[HttpPost]
public async Task<ActionResult<string>> ProcessMessage([FromBody] ValuesModel message)
{
    string response = "";
    
    // 你的业务处理逻辑
    
    return response;
}

2. 把XML格式化器配置弄对

在Startup.cs的ConfigureServices里,用更简便的扩展方法配置XML格式化:

services.AddMvc()
.AddXmlSerializerFormatters(); // 这个方法会自动配置好XML序列化所需的输入输出格式化器

如果需要更灵活的序列化规则,也可以用XmlDataContractSerializer:

services.AddMvc(options =>
{
    options.InputFormatters.Add(new XmlDataContractSerializerInputFormatter(options));
    options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
});

3. 发请求时必须带对请求头

发送XML请求一定要设置请求头Content-Type: application/xml(或text/xml),不然ASP.NET Core会默认用JSON格式化器去解析,肯定失败。

4. 要是实在不想建实体类(不推荐)

那只能手动读取请求体自己解析XML:

[HttpPost]
public async Task<ActionResult<string>> ProcessMessage()
{
    // 直接读取请求体里的XML内容
    string xmlContent = await new StreamReader(Request.Body).ReadToEndAsync();
    // 用XDocument或XmlSerializer手动解析
    XDocument doc = XDocument.Parse(xmlContent);
    // 示例:提取Value1的值
    string value1 = doc.Element("Values")?.Element("Value1")?.Value;
    
    string response = "";
    return response;
}

测试注意点

  • XML标签的大小写要和实体类属性名对应,默认XML序列化器区分大小写
  • 确认请求头的Content-Type没有拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:13:41