我正在使用 Windows Phone/Store 应用程序的新运行时开发 Windows 通用应用程序。我使用以下代码向服务器发送请求,并期望返回 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;
}
我认为问题不在于这段代码片段,而在于调用者。我怀疑此代码位于返回任务的方法中(正确以便调用者可以等待此方法的 HttpClient 调用工作),但调用者并未等待它。
代码片段看起来正确,并且与以下文档中的基本相同https://msdn.microsoft.com/en-us/library/windows/apps/windows.web.http.httpclient.aspx https://msdn.microsoft.com/en-us/library/windows/apps/windows.web.http.httpclient.aspx。 GetStringAsync 返回一个任务。 wait 将处理 Task 部分并将字符串返回到 var result 中。如果您打破函数内部并检查 result 或 checkResult,它们将是所需的字符串。
呼叫者也需要发生同样的事情。如果这是在一个函数中
Task<string> GetData()
{
// your code snippet from the post
return checkResult; // string return is mapped into the Task<string>
}
然后需要使用await 调用它来获取字符串而不是任务,并等待GetData 的内部await 完成:
var v = GetData(); // wrong <= var will be type Task<string>
var data = await GetData(); // right <= var will be type string
唯一不等待任务的情况是,如果您需要操作任务本身而不仅仅是获取结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)