从HttpRequestMessage获取内容结果?

问题描述 投票:0回答:1

我有以下代码:

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;

上面的请求应该返回一个字符串结果,但是结果是空的。我会失踪吗?

c# httpclient
1个回答
2
投票

在延续运行之前您无法使用结果,因此请将

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;
© www.soinside.com 2019 - 2024. All rights reserved.