Я использую API, который ожидает XML в запросе тела. Сначала я использовал API через Postman, и он работал, затем я использовал этот инструмент Postman, чтобы преобразовать запрос в код RestCharp C #, а затем, используя этот код, ответ, который я получал, был другим по сравнению с почтальоном. После этого я использовал Fiddler для генерации кода c # с запросом почтальона, и, используя этот код, сгенерированный fiddler, я смог успешно использовать API через код. Я просто пытаюсь понять, в чем разница между кодом, сгенерированным из почтальона, и кодом, сгенерированным из Fiddler.
Это код, сгенерированный из Fiddler, и он работает:
HttpWebRequest request =
(HttpWebRequest)WebRequest.Create("http://x.x.x.x.x");
request.Accept = "*/*";
request.KeepAlive = true;
request.Method = "POST";
request.ServicePoint.Expect100Continue = false;
byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body);
request.ContentLength = postBytes.Length;
Stream stream = request.GetRequestStream();
stream.Write(postBytes, 0, postBytes.Length);
stream.Close();
response = (HttpWebResponse)request.GetResponse();
Это код, сгенерированный из Postman (слегка измененный, но, тем не менее, код, сгенерированный из Postman, не работал, и я не думаю, что внесенные изменения помешали результату) с использованием RestSharp, который не работает:
var client = new RestClient("http://x.x.x.x.x");
client.ConfigureWebRequest((r) =>
{
r.ServicePoint.Expect100Continue = false;
r.KeepAlive = true;
});
var request = new RestRequest();
request.AddXmlBody(body);
IRestResponse response = client.Post(request);
return response;
Я много чего пробовал в коде RestSharp, например, добавление заголовка с различными типами контента и кодировкой, например,
request.AddHeader("Content-Type", "text/xml;charset=utf-8");
, но ничего не получалось. В ответе API, когда он используется кодом RestSharp, говорится, что он получил ошибку NPE, что, как я полагаю, означает NullPointerException, но, поскольку API работает нормально через почтальон и код, сгенерированный Fiddler, я не думаю, что проблеманаходится в API. Кстати, тело параметра в коде одинаково в обоих кодах.