c# - 发送 SOAP 样式请求时出现 RestSharp 问题
问题描述
我最近实现了 RestSharp,而不是在 .NET Core 中使用普通的旧 HTTP 客户端。这对于一些 OAuth1 身份验证问题也很有帮助,而且效果很好。
然而,我需要支持的一个需求现在被打破了——调用仍然使用 SOAP 信封和 XML 的旧版本 NAV。
我的 RestSharp 请求是这样构建的(部分编辑):
var request = new RestRequest(transmission.Url.PathAndQuery, Helper.GetRestSharpMethod(transmission.Method), dataType);
request.AddParameter("text/xml", body, "text/xml", ParameterType.RequestBody);
其中 dataType 是 Datatype.Xml 而 body 是我的肥皂信封作为 XML 文本。我试过“应用程序/xml”。我也尝试过使用 request.AddBody 和 request.AddBodyXml - 但它们只会引起更多问题。
端点(我们知道它与旧请求一起工作)返回一个问题,即无法从 SOAP 信封内部读取数据(我们再次知道它在那里,因为它在请求的参数中)。
任何人都可以提出任何解决此问题并仍在使用 rest sharp 的方法吗?或者这不是真的打算支持,我最好在这个特定部分使用普通的 HTTP 客户端?
谢谢。
编辑:
关于旧代码,SOAP 信封文本是相同的。不同之处在于,我没有使用 RestSharp request.AddBody(),而是构建了标准 HttpRequestMessage,然后将 HttpContent 设置为new StringContent(content)
这是使用标准 .NET Core httpclient 发送的
var response = await client.SendAsync(request);
解决方案
好的,终于明白了这一点 - 在这里发帖以防其他人有类似的问题。
首先 - 是的,它受支持。
然而,沿途有许多陷阱——RestSharp 会自动处理转义的
URL
字符串。不要自己逃避它们。使用
request.AddParameter
withParameterType.RequestBody
而不是 request.AddBody。创建其余客户端时,请务必
URI
在使用基本身份验证时将其全部提供(我使用的是部分基地址OAuth1
,并保留了它)。创建时
IRestRequest
,请注意提供其他参数,例如DataFormat
,因为删除它似乎有助于解决问题。
希望这可以帮助。
推荐阅读
- reactjs - React js在按钮单击时获取表格数据
- java - 如何使用 Hibernate 处理 PostgreSQL XML 字段?
- elasticsearch - 重复数据 - Elasticsearch
- android - 天文台空对象参考
- excel - 数据透视表的内容格式
- html - Safari 中的 CSS 透视图/translateZ 问题
- javascript - 我已经使用 javascript 为移动设备创建了这个切换菜单,但这不起作用
- javascript - 测试字符串是否只包含字符
- linux - 取消作业时是否所有由 Slurm 作业启动的进程都被终止?
- javascript - 如何在 reactJS 中使用带有 momentJS 的 simple-react-validator 验证日期?