Il download pagine web in WinRT genera un'eccezione
-
22-10-2019 - |
Domanda
Sto usando questo codice per scaricare una pagina web nel mio Metro Style App:
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;
}
il problema è che quando viene eseguito linea client.GetAsync(url)
, viene generata un'eccezione che dice:
Da An error occurred while sending the request.
tipo:. HttpRequestException
EDIT:
Ho usato l'InnerException per maggiori informazioni. La prima eccezione generata è SocketException
con il messaggio di seguito:
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: Ho scaricato e fatto funzionare il campione di Microsoft e ottengo lo stesso errore: http://code.msdn.microsoft.com/windowsapps/HttpClient- Carica-Sample-f1abcc4e
EDIT 3: Ho eseguito questo su un'altra macchina e ha funzionato bene. Quindi credo che ci sia niente di sbagliato con il codice. Ho copiato la soluzione e significa che non c'è niente di sbagliato con la soluzione sia. Sto cercando di ri-installare Windows Developer Preview per vedere se si risolve il problema.
Soluzione
OK. Ho trovato la risposta. L'eccezione era perché ho installato prodotto NetLimiter su Windows 8 Developer Preview e in qualche modo impedito la mia app di accedere a Internet.
UPDATE: Prima di tutto, questo è il codice di lavoro in ogni versione di 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 "";
}
}
In secondo luogo, se questo non funziona, è probabile, si dispone di un software di rete relative impedendo la vostra applicazione per accedere a Internet. Un caso popolare è Proxifier . Se avete installato Proxifier le applicazioni MetroStyle non sarà in grado di accedere a Internet per farlo funzionare, si prega di fare riferimento al mio blog all'indirizzo:.
generale / windows-8-senza-fiddler2 uso-Proxifier-in-Altri suggerimenti
abbastanza sicuro netlimiter correva la tua richiesta Internet attraverso un proxy localhost, e la vostra applicazione non ha avuto la capacità di "rete locale" che consentirebbe tale accesso alla rete locale