使用HTTPClient调用REST API时,在httpResponseMessage中获取null



我正在尝试执行一个使用HTTP POST的REST API。API消耗并生成xml内容。我在httpResponseMessage中得到null,并且没有引发异常。我尝试通过HttpWebRequest执行相同的REST API。我得到了下面的响应,你可以找到工作和不工作的情况。性能方面,HttpWebRequest和HTTPClient哪个更好?

不工作的HTTPClient

try {
using(var client = new HttpClient()) {
Console.WriteLine(inputxml);
var httpContent = new StringContent(inputxml, Encoding.UTF8, "application/xml");
Uri testUri = new Uri("http://127.0.0.1:8080/rest/services/getDocument");
var httpResponseMessage = await client.PostAsync(testUri, httpContent);
Console.WriteLine(httpResponseMessage.Content.ReadAsStringAsync());
if (httpResponseMessage.StatusCode == HttpStatusCode.OK) {
var messageContents = await httpResponseMessage.Content.ReadAsStringAsync();
}
}
}

工作案例HTTPWebREquest

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://127.0.0.1:8080/rest/services/getDocument");
byte[] bytes = Encoding.UTF8.GetBytes(inputxml.ToString());
request.ContentType = "application/xml";
request.ContentLength = bytes.Length;
request.Method = "POST";
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response;
response = (HttpWebResponse) request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK) {
Stream responseStream = response.GetResponseStream();
string responseStr = new StreamReader(responseStream).ReadToEnd();
Console.WriteLine("responseStr " + responseStr);
return responseStr;
}
return null;
}

此处:

Console.WriteLine(httpResponseMessage.Content.ReadAsStringAsync());

您正在读取响应正文,并将System.Threading.Task1`打印到控制台。然后,下次您再次尝试读取响应体时,它的流已结束,不会返回任何内容。

读取内容一次,等待调用并将结果存储在变量中。

您可以使用RestSharp发送HTTP请求。对我来说,这是HTTP通信的最佳和最简单的方法。

public string SendRequest(String xml)
{
string responseMessage= "";
RestClient restClient;
restClient = new RestClient("http://127.0.0.1:8080/rest/services/getDocument");
RestRequest restRequest = new RestRequest(Method.POST);
restRequest.AddHeader("Accept", "application/xml");
restRequest.AddHeader("Content-Type", "application/xml");
restRequest.AddXmlBody(xml);
IRestResponse restResponse = restClient.Execute(restRequest);
if (restResponse.StatusCode == HttpStatusCode.OK)
{
responseMessage= restResponse.Content;
}
return responseMessage;
}
}

相关内容

  • 没有找到相关文章

最新更新