【发布时间】:2019-02-04 16:23:59
【问题描述】:
我最近在 .NET Core 中实现了 RestSharp,而不是使用普通的旧 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);
【问题讨论】:
-
查看以下帖子的结尾:forum.mibuso.com/discussion/39037/…。如果这没有帮助,我会使用嗅探器来比较工作和非工作应用程序并比较 http 标头。您需要添加/修改标题才能使其正常工作。
-
谢谢,我现在就去看看...
-
不幸的是,我认为这没有帮助 - 在原始请求中发送的 SOAP XML 有效,并且在新的 RestSharp 请求中是相同的
-
你有旧代码在 NAV 工作的地方吗?
-
添加了一些旧代码信息...不幸的是,由于它分布在多个类中,因此很难添加。基本上,这只是创建一个新的 HttpRequestMessage,创建 SOAP 内容(作为 HttpContent)然后将 RequestMessage 的内容设置为该内容的情况——所有这些都非常标准。