使用便携式类库(PCL)从URL下载字符串

use*_*095 5 c# webclient portable-class-library windows-runtime windows-phone-8

我正在尝试从便携式类库中的任何网页下载字符串.我创建了最基本的设置:

  • 创建了一个新的PCL项目
    • 兼容WP8和WinRT以及Silverlight等强制组件

由于WebClient在这些系统之间不兼容,因此无法使用:

string data = new WebClient().DownloadString();
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用它(使用):

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = HttpMethod.Get;
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

string data = ""
using (var sr = new StreamReader(response.GetResponseStream()))
{
    data = sr.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

但是,当我从引用PCL的外部C#应用程序调用第二组代码时,调试器只是失败,并且没有警告或错误消息:

request.GetResponseAsync();
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来下载我缺少的字符串?

*另外,为什么调试器只是退出而没有解释?

编辑:

这是我尝试的另一种方法 - 基于已经提供的答案.同样,此方法只是退出并强制关闭调试器.

PCL方法:

public static async Task<string> DownloadString()
{
    var url = "http://google.com";
    var client = new HttpClient();
    var data = await client.GetStringAsync(url);

    return data;
}
Run Code Online (Sandbox Code Playgroud)

通话方式:

private static async void Method()
{
    string data = await PCLProject.Class1.DownloadString();
    return data;
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 21

安装NuGet包:

  • Microsoft.Bcl.Async,增加async/ await支持PCL.
  • Microsoft.Net.Http,这增加了HttpClient对PCL的支持.

然后你可以轻松地做到这一点:

var client = new HttpClient();
var data = await client.GetStringAsync(url);
Run Code Online (Sandbox Code Playgroud)