【问题标题】:RestSharp issues when sending SOAP style Request发送 SOAP 样式请求时出现 RestSharp 问题
【发布时间】: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 的内容设置为该内容的情况——所有这些都非常标准。

标签: c# xml soap restsharp


【解决方案1】:

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

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

  • 但是,在此过程中存在许多问题 - RestSharp 自动处理转义的URL 字符串。不要逃避他们 自己。

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

  • 在创建rest客户端时,一定要给它完整的URI 使用基本身份验证(我使用部分基地址 OAuth1,并把它转过来)。

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我认为这会解决问题:

    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);
    

    【讨论】:

    • “我想它会解决的。”所以..您不知道,没有尝试也无法解释它应该如何工作以及为什么这可能有助于解决问题?
    • 欢迎来到 StackOverflow。请提供一些解释,为什么您认为您提出的解决方案可能对 OP 有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多