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

如何在UmbracoApiController中处理application/xml请求?

问题:接收application/xml类型WebHook时返回415 Unsupported Media Type错误

我尝试创建控制器操作响应发送application/xml的WebHook,但通过Postman访问时收到**415 Unsupported Media Type**错误。

控制器代码:

[PluginController("MyPlugin")]
public class MyPluginServiceController : UmbracoApiController
{ 
    ...
    [HttpPost]
    [Consumes("application/xml")]
    public IActionResult HandleXml([FromBody] XElement body)
    {
        return Content(body.ToString());
    }
}

已配置服务添加AddXmlSerializerFormatters:

public void ConfigureServices(IServiceCollection services)
{
        services.AddMvc().AddXmlSerializerFormatters();

        services
                .AddUmbraco(_env, _config)
                .AddBackOffice()
                .AddWebsite()
                .AddComposers()
                .Build();
}

解决方法

1. 调整服务注册顺序

Umbraco的AddUmbraco会内部初始化自身的Mvc配置,先调用AddMvc().AddXmlSerializerFormatters()会被Umbraco的配置覆盖。需先注册Umbraco服务,再添加Xml格式化器:

public void ConfigureServices(IServiceCollection services)
{
        // 优先注册Umbraco服务
        services
                .AddUmbraco(_env, _config)
                .AddBackOffice()
                .AddWebsite()
                .AddComposers()
                .Build();

        // 再添加Xml序列化格式化器
        services.AddMvc().AddXmlSerializerFormatters();
}

2. 验证Postman请求配置

确保Postman的请求参数符合要求:

  • 请求头中Content-Type必须设置为application/xml
  • 若不需要返回XML格式响应,可忽略Accept头,但请求的Content-Type不能缺失或错误

3. 更换接收类型(可选)

如果XElement模型绑定仍异常,可尝试以下两种方式:

  • 使用XmlDocument接收原始XML:
    [HttpPost]
    [Consumes("application/xml")]
    public IActionResult HandleXml([FromBody] XmlDocument body)
    {
        return Content(body.OuterXml);
    }
    
  • 创建强类型模型并配置Xml序列化特性:
    [XmlRoot("WebHookPayload")]
    public class WebHookPayload
    {
        [XmlElement("EventType")]
        public string EventType { get; set; }
        [XmlElement("Data")]
        public string DataContent { get; set; }
    }
    
    // 控制器方法
    [HttpPost]
    [Consumes("application/xml")]
    public IActionResult HandleXml([FromBody] WebHookPayload body)
    {
        return Ok(body);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:15:59