[英]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.AddParameter
和ParameterType.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.