【发布时间】:2016-09-15 09:24:04
【问题描述】:
我想将基于 SOAP XML 的消息发布到我在 ASP.NET 核心项目模板中创建的 Web API。
现在,当我使用内容类型作为应用程序/soap+xml 进行发布时,我收到了不受支持的媒体类型错误。
我知道我们应该将 SOAP 消息发送到基于 WCF 的服务,但我们的要求只是这样。我应该能够在 Web API 中使用 SOPA 消息。
谢谢, 苏达玛
【问题讨论】:
-
您将如何从不理解 SOAP 的服务中使用 SOAP?没有明智的方法将 WebAPI 转换为 SOAP。您必须使用 WCF 服务,别无他法,这意味着使用完整的 .NET 框架。 WebAPI 是 REST Api,而不是 SOAP
-
我使用下面的代码来发布 SOAP 消息并检索基本上是 xml 的主体,现在我正在尝试反序列化它,但缺少错误根元素,否则我似乎找到了解决方法[HttpPost]公共查找帖子([FromBody] XmlDocument xmlDocument){var soapBody = xmlDocument.GetElementsByTagName("soap12:Body")[0];字符串 innerObject = soapBody.InnerXml; XmlSerializer deserializer = new XmlSerializer(typeof(Find));使用 (TextReader reader = new StreamReader(innerObject)) { return (Find)deserializer.Deserialize(reader); } }
-
您当然可以从请求正文中读取有效负载。但为此,您需要启用缓冲/倒带。请参阅 Tratcher 的答案(更具体的 cmets)stackoverflow.com/a/37842083/455493 然后您可以使用 XmlDocument 的
Load方法自己解析流...但这会消耗更多内存,具体取决于您的肥皂有效负载的大小跨度> -
但这里要注意,如果你也从body中获取action参数,你只需要缓冲/倒带,因为请求流默认是转发的(只能读取一次)跨度>
标签: c# soap asp.net-web-api asp.net-core