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)
我认为问题不在于此代码段,而是在调用者中.我怀疑这个代码是在一个方法中返回一个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)
只有你需要操作任务本身而不仅仅是获得结果时,你唯一不会等待任务的时间.