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

标签 c# windows-phone-8 windows-runtime webclient portable-class-library

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

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

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

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

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

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

最佳答案

安装 NuGet 包:

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

然后你可以用简单的方法做到这一点:

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

关于c# - 使用可移植类库 (PCL) 从 URL 下载字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17749553/

相关文章:

c# - Windows 手机 8 : Send data to a remoteserver

xaml - 我应该如何在 Windows 应用商店应用程序中显示带有绑定(bind)数据的格式化文本?

c# - 如何在 Windows Phone 8.1 中使用 ThemeResources 更改主题?

c# - 在 WinRT/C# 中通过 StreamSocket 连接到 IMAP

c# - 将较小的数组复制到较大的数组中

c# - 在 ASP.NET Core 中获取 Controller 详细信息

c# - WP8列表框加载MVVM

c# - 使用循环填充二维数组

c# - 如何更改列表框选择背景颜色?

performance - Windows Phone 8 HTML5 - 本地与远程 HTML 性能