【问题标题】:Download string from URL using a portable class library (PCL)使用可移植类库 (PCL) 从 URL 下载字符串
【发布时间】:2013-07-19 15:11:22
【问题描述】:

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

  • 创建了一个新的 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;
}

【问题讨论】:

  • 您是在桌面应用程序、Windows 应用商店应用程序、WP8 应用程序中运行此程序,还是看到此行为时是什么情况?您确定您正在等待或等待所有任务吗? (否则程序可能会在下载完成之前运行完成并退出。)如果您使用的是 Windows Phone,您是否正在做任何会在下载完成时阻塞 UI 线程的事情(即通过 Task.Wait 或 Task.结果)?

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


【解决方案1】:

安装 NuGet 包:

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

那么你可以用简单的方法来做:

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

【讨论】:

  • 我仍然遇到同样的问题。即使在我创建了两个新的、独立的项目之后 - 该方法也只是失败了,没有警告或异常。我将编辑我的原始帖子以包含此尝试。
  • 确保您的防火墙允许您的应用通过。另外,请确保您访问的是 DNS。
  • 到底为什么我的防火墙会干扰?
【解决方案2】:

这个方法对我有用,它返回了来自 google.com 的 HTML 源代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多