我正在使用此代码在Metro风格应用中下载网页:
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,看看它是否解决了我的问题。
答案 0 :(得分:4)
行。我找到了答案。例外情况是因为我在Windows 8开发人员预览版中安装了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 "";
}
}
其次,如果这不起作用,您可能会有一个与网络相关的软件阻止您的应用访问互联网。一个流行的案例是 proxifier 。如果您安装了代理程序您的MetroStyle应用程序将无法访问互联网。要使其正常运行,请参阅我的博客:
http://anoori.me/blog/general/use-proxifier-in-windows-8-without-fiddler2
答案 1 :(得分:0)
非常确定netlimiter是通过localhost代理运行您的互联网请求,而您的应用没有&#34;本地网络&#34;能够允许这种访问本地网络的能力