Téléchargement des pages Web dans WinRT lance une exception
-
22-10-2019 - |
Question
J'utilise ce code pour télécharger une page Web dans mon application 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;
}
le problème est que lors de l'exécution de client.GetAsync(url)
ligne, il renvoie une exception qui dit:
De An error occurred while sending the request.
Type:. HttpRequestException
EDIT:
Je l'ai utilisé la InnerException pour obtenir plus d'informations. La première exception levée est SocketException
avec le message ci-dessous:
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)
EDIT 2: Je l'ai téléchargé et couru l'échantillon de Microsoft et je reçois la même erreur: http://code.msdn.microsoft.com/windowsapps/HttpClient- Télécharger-échantillon-f1abcc4e
EDIT 3: J'ai couru ceci sur une autre machine et il a bien fonctionné. Donc, je suppose qu'il n'y a rien de mal à ce code. Je copiais la solution et cela signifie qu'il n'y a rien de mal avec de la solution non plus. Je suis en train de re-installer Windows Developer Preview pour voir si elle résout mon problème.
La solution
OK. J'ai trouvé la réponse. L'exception a été installé parce que je produit NetLimiter sur Windows 8 Developer Preview et d'une certaine manière a empêché mon application d'accéder à Internet.
Mise à jour: Tout d'abord, c'est le code de travail dans TOUS version de 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 "";
}
}
En second lieu, si cela ne fonctionne pas, les chances sont, vous disposez d'un logiciel lié réseau empêchant votre application d'accéder à Internet. Un cas est populaire proxifier . Si vous avez installé proxifier vos applications metrostyle ne seront pas en mesure d'accéder à Internet Pour le faire fonctionner, s'il vous plaît se référer à mon blog à l'adresse:.
http://anoori.me/blog/ général / use-proxifier-in-windows-8-sans-Fiddler2
Autres conseils
assez sûr NetLimiter est en cours d'exécution de votre demande Internet via un proxy localhost et votre application n'a pas la capacité « réseau local » qui permettrait un tel accès au réseau local