我有以下代码:
var client = new HttpClient()
{
BaseAddress = new Uri(@"https://myhost:myport/"),
};
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var uri = @"myurl";
var s = JsonConvert.SerializeObject(myobject);
string responseResult = string.Empty;
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Put, uri);
request.Content = new StringContent(s, Encoding.UTF8, "application/json");
client.SendAsync(request)
.ContinueWith(responseTask =>
{
responseResult = responseTask.Result.Content.ReadAsStringAsync().Result;
});
txtLog.Text = responseResult;
上面的请求应该返回一个字符串结果,但是结果是空的。我会失踪吗?
在延续运行之前您无法使用结果,因此请将
Text
属性的赋值移至延续中:
client.SendAsync(request)
.ContinueWith(responseTask =>
{
responseResult = responseTask.Result.Content.ReadAsStringAsync().Result;
txtLog.Text = responseResult;
});
另一个复杂之处是
Text
属性只想在 UI 线程上设置:
client.SendAsync(request)
.ContinueWith(responseTask =>
{
responseResult = responseTask.Result.Content.ReadAsStringAsync().Result;
Dispatcher.Invoke(() => txtLog.Text = responseResult);
});
编辑
Await/async 通常更容易使用;你可以用这个替换上面的:
var message = await client.SendAsync(request);
responseResult = await message.Content.ReadAsStringAsync();
txtLog.Text = responseResult;