繁体   English   中英

发送 SOAP 样式请求时出现 RestSharp 问题

[英]RestSharp issues when sending SOAP style Request

我最近在 .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 信封内部读取数据的问题(我们再次知道它在那里,因为它在请求的参数中)。

任何人都可以提出任何解决此问题并仍然使用休息锐利的方法吗? 或者这不是真的打算支持,我最好在这个特定部分使用普通的 HTTP 客户端?

谢谢。

编辑:

关于旧代码,SOAP 信封文本是相同的。 不同之处在于,我没有使用 RestSharp request.AddBody(),而是构建了标准的 HttpRequestMessage,然后将 HttpContent 设置为new StringContent(content)

这是使用标准 .NET Core httpclient 发送的

var response = await client.SendAsync(request);

好的,终于搞清楚了 - 在这里发布以防万一其他人有类似的问题。

首先 - 是的,它是受支持的。

  • 然而,一路上有很多问题——RestSharp 会自动处理转义的URL字符串。 不要自己逃避他们。

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

  • 创建其余客户端时,请确保在使用基本身份验证时为其提供完整的URI (我使用的是OAuth1部分基地址,并将其OAuth1 )。

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

希望这可以帮助。

我认为这将解决问题:

var client = new RestClient(requestUrl);
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "text/xml");
request.AddParameter("text/xml", requestBody, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM