从HttpClient.GetStringAsync读取响应

irl*_*dev 4 c# windows-runtime windows-phone-8.1 win-universal-app

我正在使用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;
        }
Run Code Online (Sandbox Code Playgroud)

Rob*_*SFT 8

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

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

呼叫者也需要做同样的事情.如果这是一个功能

Task<string> GetData() 
{
    // your code snippet from the post 
    return checkResult; // string return is mapped into the Task<string>
}
Run Code Online (Sandbox Code Playgroud)

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

var v = GetData(); // wrong <= var will be type Task<string>
var data = await GetData(); // right <= var will be type string
Run Code Online (Sandbox Code Playgroud)

只有你需要操作任务本身而不仅仅是获得结果时,你唯一不会等待任务的时间.