Загрузка веб -страниц в Winrt бросает исключение
-
22-10-2019 - |
Вопрос
Я использую этот код для загрузки веб -страницы в моем приложении 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, чтобы увидеть, решает ли это моя проблема.
Решение
ХОРОШО. Я нашел ответ. Исключение было потому, что я установил продукт NetLimiter в предварительный просмотр разработчиков Windows 8, и каким -то образом это помешало моему приложению получить доступ к Интернету.
ОБНОВИТЬ:Прежде всего, это код, работающий в КАЖДЫЙ Версия 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
Другие советы
почти уверен, что NetLimiter запускал ваш интернет -запрос через прокси -сервер Localhost, и ваше приложение не имело возможности «локальной сети», которая позволила бы такой доступ к локальной сети