3

我正在使用此代码在我的 Metro Style 应用程序中下载网页:

    public static async Task<string> DownloadPageAsync(string url)
    {
        HttpClientHandler handler = new HttpClientHandler();
        handler.UseDefaultCredentials = true;
        handler.AllowAutoRedirect = true;
        HttpClient client = new HttpClient(handler);
        HttpResponseMessage response = await client.GetAsync(url);

        response.EnsureSuccessStatusCode();

        string responseBody = response.Content.ReadAsString();
        return responseBody;
    }

问题是,当该行client.GetAsync(url)运行时,它会抛出一个异常,上面写着:

An error occurred while sending the request.从类型:HttpRequestException.

编辑:

我使用 InnerException 来获取更多信息。抛出的第一个异常是SocketException以下消息:

An attempt was made to access a socket in a way forbidden by its access permissions

at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)

at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)

编辑 2:我已经从 Microsoft 下载并运行了示例,我得到了同样的错误: http ://code.msdn.microsoft.com/windowsapps/HttpClient-Upload-Sample-f1abcc4e

错误如图所示

编辑 3:我在另一台机器上运行它,它运行良好。所以我想代码没有问题。我复制了解决方案,这意味着解决方案也没有任何问题。我正在尝试重新安装 Windows Developer Preview 以查看它是否能解决我的问题。

4

2 回答 2

4

好的。我找到了答案。例外是因为我在 Windows 8 Developer Preview 上安装了 NetLimiter 产品,它以某种方式阻止了我的应用程序访问互联网。

更新: 首先,这是在每个版本的 Windows 8 中工作的代码。

    public static async Task<string> DownloadPageAsync(string url)
    {
        try
        {
            HttpClientHandler handler = new HttpClientHandler { UseDefaultCredentials = true, AllowAutoRedirect = true };
            HttpClient client = new HttpClient(handler);
            HttpResponseMessage response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();
            string html = await response.Content.ReadAsStringAsync();
            return html;
        }
        catch (Exception)
        {
            return "";
        }
    }

其次,如果这不起作用,很可能是您有一个与网络相关的软件阻止您的应用程序访问 Internet。一个流行的案例是proxifier。如果您安装了 proxifier,您的 MetroStyle 应用程序将无法访问互联网。为了使它工作,请参考我的博客:

http://anoori.me/blog/general/use-proxifier-in-windows-8-without-fiddler2

于 2011-11-29T17:40:49.407 回答
0

很确定 netlimiter 正在通过 localhost 代理运行您的 Internet 请求,而您的应用程序没有允许访问本地网络的“本地网络”功能

于 2015-01-16T17:46:23.213 回答