![](/img/trans.png)
[英]C# NameValueCollection problem send with HttpClient PostAsync
[英]C# HTTPClient PostAsync does not send data
我有以下代码来发送 HTTP 请求,但它不传输任何数据包(使用 Wireshark 检查)。
var httpClient = new HttpClient();
string uri = "http://" + IP + ":" + port + "/";
var stringContent = new StringContent(xmlString, Encoding.UTF8, "application/xml");
var respone = httpClient.PutAsync(uri, stringContent);
但是,当我添加时它会传输数据包:
respone.Wait(100);
您能否帮助了解如何让 httpClient.PutAsync 无需等待即可工作?
谢谢!
正如他们已经告诉您的那样,您正在使用异步调用,因此您必须等到该操作解决才能结束您的方法/程序。
此外,对 httpClient 和内容使用 using 语句是一种很好的做法,因此一旦执行代码就可以释放内存。 也许你会想要对 HTTP 响应做出反应。 尝试这样的事情:
using (HttpClient httpClient= new HttpClient())
{
using (StringContent content = new StringContent(xmlString))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
HttpResponseMessage message = await httpClient.PutAsync(new Uri("http://" + IP + ":" + port + "/"), content).ConfigureAwait(false);
if (!message.IsSuccessStatusCode)
{
//For example log a failure
_logger.LogError($"HTTP unsuccess status code: {await message.Content.ReadAsStringAsync().ConfigureAwait(false)}");
}
}
}
PutAsync
是一个异步方法,它返回System.Threading.Tasks.Task<TResult>
是可等待的,应该等待异步调用它并获取它的结果 此代码是异步调用该方法并返回其值的最佳方式注意: 你最好在Async
方法中调用它:
var respone = await httpClient.PutAsync(uri, stringContent);
如果你坚持同步调用它,你可以得到Task
的Result
,
这将导致您的线程阻塞,直到
Result
可用,因为@Heinzi 回答了这个问题:
var respone = httpClient.PutAsync(uri, stringContent).Result;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.