从HttpClient.GetStringAsync读取响应

我正在使用Windows Phone / Store应用程序的新运行时使用Windows Universal应用程序。 我正在使用以下代码向服务器发送请求,并期望返回HTML响应。 但是,当我返回字符串并在UI中显示它时,它只是说:

“System.Threading.Tasks.Task’1 [System.String]”

它没有向我显示应该返回的实际HTML / XML。 当我在普通的Windows窗体应用程序中使用相同的URL时,它会返回我期望的数据,但我在那里使用的代码是不同的,因为它是Win32而不是WinRT /这个新的RT。

这是我的代码。 我怀疑我没有以正确的格式返回数据,但我不知道我应该做什么。

var url = new Uri("http://www.thewebsitehere.com/callingstuff/calltotheserveretc"); var httpClient = new HttpClient(); try { var result = await httpClient.GetStringAsync(url); string checkResult = result.ToString(); httpClient.Dispose(); return checkResult; } catch (Exception ex) { string checkResult = "Error " + ex.ToString(); httpClient.Dispose(); return checkResult; } 

我认为问题不在于此代码段,而是在调用者中。 我怀疑这个代码是在一个方法中返回一个Task(正确的,这样调用者可以等待这个方法的HttpClient调用工作),但是调用者没有等待它。

代码段看起来是正确的,与https://msdn.microsoft.com/en-us/library/windows/apps/windows.web.http.httpclient.aspx中的文档基本相同。 GetStringAsync返回一个Task。 await将处理Task部分并将字符串返回到var结果中。 如果你在函数内部并检查结果或checkResult它们将是所需的字符串。

呼叫者也需要做同样的事情。 如果这是一个function

 Task GetData() { // your code snippet from the post return checkResult; // string return is mapped into the Task } 

然后需要使用await调用来获取字符串而不是任务,并等待GetData的内部等待完成:

 var v = GetData(); // wrong <= var will be type Task var data = await GetData(); // right <= var will be type string 

只有当你需要操作任务本身而不仅仅是得到结果时,你才能等待任务的唯一时间。