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

