发送SOAP样式请求时的RestSharp问题

时间:2019-02-04 16:24:00

标签: c# xml 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文本信封。我已经尝试过“ application / xml”。我也尝试过使用request.AddBody和request.AddBodyXml-但它们只是引起了更多问题。

端点(我们知道可以与旧请求一起使用)返回一个问题,无法从SOAP信封内部读取数据(我们再次知道那里,因为它在请求的参数中)。

有人可以提出解决此问题的方法,而仍然使用其余的方法吗?还是不打算真正支持此功能?对于此特定部分,最好使用普通的HTTP Client?

谢谢。

编辑:

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

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

var response = await client.SendAsync(request);

2 个答案:

答案 0 :(得分:0)

好吧,终于了解了这一点-如果有人遇到类似问题,请在此处发布。

首先-是的,它受支持。

  • 但是,一路上有很多陷阱-RestSharp 自动处理转义的URL字符串。不要逃避他们 你自己。

  • 使用带有ParameterType.RequestBody的request.AddParameter代替 request.AddBody。

  • 创建其余客户端时,请确保在以下情况下提供完整的URI: 使用基本身份验证(我在使用部分基地址 OAuth1,并保留下来。)

  • 在创建IRestRequest时,请谨慎提供诸如DataFormat之类的其他参数,因为删除该参数似乎有助于解决问题。

希望这会有所帮助。

答案 1 :(得分:0)

我认为这可以解决问题:

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