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

如何让C#编写的API接收XML而非URL参数?

解决ASP.NET Web API接收XML请求体参数为空的问题

你的问题根源在于:Web API默认会将int、bool这类简单类型参数从URL查询字符串中绑定,而不是从请求体读取。所以即使你发送了XML请求体,方法里的参数也不会被正确赋值。需要从代码调整和Postman请求设置两方面入手解决:

一、代码层面调整

1. 创建对应XML结构的模型类

首先需要定义一个与XML数据结构匹配的实体类,用来接收请求体中的XML数据。这里分两种序列化方式的写法:

方式一:使用XmlSerializer(匹配自定义标签名)

如果想保留你原来的<response>根标签和小写子标签,可以给模型类添加XML序列化特性:

using System.Xml.Serialization;

[XmlRoot("response")]
public class SendEmailRequest
{
    [XmlElement("orderID")]
    public int OrderID { get; set; }
    
    [XmlElement("internalUse")]
    public bool InternalUse { get; set; }
    
    [XmlElement("subject")]
    public string Subject { get; set; }
    
    [XmlElement("message")]
    public string Message { get; set; }
}

方式二:使用DataContractSerializer(默认序列化方式)

如果用Web API默认的DataContractSerializer,需要添加数据契约特性:

using System.Runtime.Serialization;

[DataContract(Name = "response")]
public class SendEmailRequest
{
    [DataMember(Name = "orderID")]
    public int OrderID { get; set; }
    
    [DataMember(Name = "internalUse")]
    public bool InternalUse { get; set; }
    
    [DataMember(Name = "subject")]
    public string Subject { get; set; }
    
    [DataMember(Name = "message")]
    public string Message { get; set; }
}

2. 修改API方法参数

将原来的四个独立参数替换为上面创建的模型类,并通过[FromBody]明确指定从请求体读取数据(复杂类型默认也会从请求体绑定,但加上特性更清晰):

public string Post([FromBody] SendEmailRequest request)
{
    if (request == null)
    {
        return "请求体为空,请检查XML格式";
    }
    
    return $"orderID: {request.OrderID}; internalUse: {request.InternalUse}; subject: {request.Subject}; message: {request.Message}";
}

3. 确保XML格式化器启用

默认情况下ASP.NET Web API已经包含XML格式化器,但如果你的项目配置中被移除,可以在WebApiConfig.cs的Register方法中添加以下代码:

public static void Register(HttpConfiguration config)
{
    // 启用XmlSerializer(如果用方式一的话)
    config.Formatters.XmlFormatter.UseXmlSerializer = true;
    
    // 添加XML格式化器(确保存在)
    config.Formatters.Add(new System.Net.Http.Formatting.XmlMediaTypeFormatter());
    
    // 其他路由配置...
}

二、Postman请求设置调整

这一步非常关键,必须确保请求头和请求体的配置正确:

  • 请求方法:保持POST
  • 请求URL:http://localhost:58069/api/values/SendEmail
  • 请求头:添加Content-Type: application/xml,告诉Web API请求体是XML格式
  • 请求体:选择raw格式,然后在下拉菜单中选XML,输入你的XML内容(和模型类匹配的版本):
<?xml version="1.0" encoding="utf-8" ?>
<response>
  <orderID>1234</orderID>
  <internalUse>true</internalUse>
  <subject>Hello</subject>
  <message>Hello World</message>
</response>

完成以上调整后,重新调用API,参数就能被正确绑定了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:06:14