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
相关产品推荐
相关产品推荐

