使用可移植类库(PCL)从URL下载字符串

本文关键字:URL 下载 字符串 PCL 可移植 类库 | 更新日期: 2023-09-27 18:23:53

我正试图从我的可移植类库中的任何网页下载一个字符串。我已经创建了最基本的设置:

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

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

string data = new WebClient().DownloadString();

我也尝试过使用这个(使用这个):

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();
}

然而,当我从引用PCL的外部C#应用程序调用第二组代码时,调试器只是失败了,并显示"无警告"或错误消息:

request.GetResponseAsync();

有没有一种简单的方法可以下载我丢失的字符串?

*同样,为什么调试器会在没有任何解释的情况下直接退出?

编辑:

这是我尝试过的另一种方法——基于已经提供的答案。同样,这个方法只是简单地退出并强制关闭调试器。

PCL方法:

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

调用方式:

private static async void Method()
{
    string data = await PCLProject.Class1.DownloadString();
    return data;
}

使用可移植类库(PCL)从URL下载字符串

安装NuGet包:

  • Microsoft.Bcl.Async,它为PCL添加了async/await支持
  • Microsoft.Net.Http,它为PCL添加了对HttpClient的支持

然后你可以用简单的方法:

var client = new HttpClient();
var data = await client.GetStringAsync(url);

这个方法对我有效,它从google.com返回了HTML源代码:

public async void GetStringFromWebpage()
{
    using (HttpClient wc = new HttpClient())
    {
      var data = await wc.GetStringAsync("http://google.com/");
      Debug.WriteLine("string:" + data);
    }
}