C# 从HttpClient.GetStringAsync读取响应

C# 从HttpClient.GetStringAsync读取响应,c#,windows-runtime,windows-phone-8.1,win-universal-app,C#,Windows Runtime,Windows Phone 8.1,Win Universal App,我正在使用Windows Phone/Store应用程序的新运行时开发Windows通用应用程序。我正在使用以下代码向服务器发送请求,并期望返回HTML响应。但是,当我返回字符串并在UI中显示它时,它只会说: “System.Threading.Tasks.Task'1[System.String]” 它没有显示应该返回的实际HTML/XML。当我在一个普通的Windows窗体应用程序中使用相同的URL时,它会返回我期望的数据,但是我在那里使用的代码不同,因为它是Win32而不是WinRT/这个

我正在使用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调用工作),但调用方没有等待它

代码片段看起来正确,基本上与中的文档相同。GetStringAsync返回一个任务。wait将处理任务部分,并将字符串返回到var result中。如果在函数内部中断并检查result或checkResult,它们将是所需的字符串

同样的事情也需要发生在打电话的人身上。如果这是在函数中

Task<string> GetData() 
{
    // your code snippet from the post 
    return checkResult; // string return is mapped into the Task<string>
}
Task GetData()
{
//文章中的代码片段
return checkResult;//字符串return映射到任务中
}
然后需要使用wait调用它,以获取字符串而不是任务,并等待GetData的内部wait完成:

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

var v=GetData();//错误只能在异步方法中使用'await'运算符。将其返回类型更改为
Task
可以解决此问题。try块应该是这样的:

try
    {
        Task<string> t = httpClient.GetStringAsync(url);
        string checkResult = t.Result;
        httpClient.Dispose();
        return checkResult;
    }
试试看
{
Task t=httpClient.GetStringAsync(url);
字符串checkResult=t.Result;
httpClient.Dispose();
返回检查结果;
}

是,in确实返回一个
任务
。您应该对它的Result属性更感兴趣。如果要处理客户端,请在
中使用(){}
块进行处理。但是,用一个单子,实际上它是两个答案的组合。我需要查看Results属性,还必须使用wait for方法调用。