首页 > 解决方案 > 发送 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);

标签: c#xmlsoaprestsharp

解决方案


好的,终于明白了这一点 - 在这里发帖以防其他人有类似的问题。

首先 - 是的,它受支持。

  • 然而,沿途有许多陷阱——RestSharp 会自动处理转义的URL字符串。不要自己逃避它们。

  • 使用request.AddParameterwithParameterType.RequestBody而不是 request.AddBody。

  • 创建其余客户端时,请务必URI在使用基本身份验证时将其全部提供(我使用的是部分基地址 OAuth1,并保留了它)。

  • 创建时IRestRequest,请注意提供其他参数,例如DataFormat,因为删除它似乎有助于解决问题。

希望这可以帮助。


推荐阅读