我最近实现了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);
答案 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);