2016-04-14 8 views
0

Ich hatte eine WebClient, die eine URL anforderte. Ich wollte die gleiche Sache in einer UWP-Anwendung tun, und ich sah, dass ich Microsoft.Net.Http und HttpClient verwenden importieren musste.HttpRequestException bei Verwendung von HttpClient?

So ersetzte ich dies (das in einer Klassenbibliothek war):

WebClient client = new WebClient(); 
client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
string content = client.DownloadString(url); 

Durch diese in einer PCL-Bibliothek:

HttpClient client = new HttpClient(); 
string content = await client.GetStringAsync(url); 

Und jetzt habe ich diese Ausnahme:

System.Net.Http.HttpRequestException occurred 
    HResult=-2147012867 
    Message=An error occurred while sending the request. 
    Source=System.Net.Http 
    StackTrace: 
     at System.Net.Http.HttpClientHandler.<SendAsync>d__1.MoveNext() 
    --- End of stack trace from previous location where exception was thrown --- 
     at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
     at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
     at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
     at XXXX.YYYY.MHDJ.ZZZZ.<ParsePage>d__4.MoveNext() 
    InnerException: 
     ErrorCode=-2147012867 
     HResult=-2147012867 
     Message=Le texte associé à ce code d’erreur est introuvable. 

Impossible d'établir une connexion avec le serveur 

     Source="" 
     StackTrace: 
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
      at System.Net.Http.HttpHandlerToFilter.<SendAsync>d__1.MoveNext() 
     --- End of stack trace from previous location where exception was thrown --- 
      at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
      at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
      at System.Net.Http.HttpClientHandler.<SendAsync>d__1.MoveNext() 
     InnerException: 

Ich glaube nicht, das Problem ist die Header, also was ist?

Antwort

0

Der HRESULT Code -2147012867 in Hex ist 0x80072EFD. Die Vorwahl 0x8007 bedeutet, dass es tatsächlich eine HRESULT wrapper around a Win32 error code ist. Der ursprüngliche Win32 Fehlercode ist 0x2EFD.

Die Win32 error code list sagt uns, dass 0x2EE0 durch 0x2F8F sind ERROR_INTERNET_* Fehlercodes Werte, die wie die richtige Art von Fehler klingt. Nachdem Sie den Link zum Win32ERROR_INTERNET_* error code listing wir unsere Fehlercode 0x2EFD zurück in Dezimalzahlen umwandeln kann (12029) und entdecken Sie es Fehler ERROR_INTERNET_CANNOT_CONNECT:

Der Versuch, mit dem Server konnte nicht hergestellt werden.

Lieber generisch und nicht viel helfen.

Ich würde empfehlen, die Verbindung erneut versuchen, sicherzustellen, dass Ihre Anwendung entsprechende Berechtigungen und das Gerät hat tatsächlich eine funktionierende Internetverbindung. Wenn das nicht funktioniert, versuchen Sie, den UserAgent Header wieder hinzuzufügen; Es ist möglich, dass der Netzwerk-Stack auf Ihrem Gerät darauf besteht.

Update: Auf der Suche nach dem Fehlercode Bedeutung war ziemlich langweilig, so dass ich wrote an app to do it.

+0

ich nun den Useragent hinzugefügt haben, und gleichen Fehler habe ich versucht, 10 Mal hintereinander und immer noch nicht funktioniert. Für die Rechte habe ich nur "Internet (Client)" hinzugefügt, ich weiß nicht, ob es noch etwas gibt, das ich hinzufügen sollte? – J4N

+0

Wenn die URL, die Sie anrufen, eine interne Domäne ist, müssen Sie auch die Funktion Private Netzwerke überprüfen. –

+0

@ J4N: War der gleiche Test mit 'WebClient'? –

0

Es gibt so viele Möglichkeiten, Dinge zu tun, und ich behaupte nicht, dass dies der beste Weg ist, aber das ist, wie ich meine Methoden konstruieren. In diesem Beispiel gebe ich eine Liste von US-State-Objekten zurück, die im JSON-Format bereitgestellt werden. Eine wichtige Anmerkung ... Dies ist in einer universellen Windows-Klassenbibliothek, nicht in einer PCL ... aber ich glaube nicht, dass es irgendetwas verwendet, auf das eine PCL keinen Zugriff hat.

using System; 
using System.Collections.Generic; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using Newtonsoft.Json; 
using System.Threading.Tasks; 

//IStateInfo is my model class interface 
public async Task<IList<IStateInfo>> GetAllStatesAsync() 
{ 
    List<IStateInfo> states = new List<IStateInfo>(); 
    try 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://YourBaseApiHere"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      string url = "lookup/usstates"; 
      HttpResponseMessage response = await client.GetAsync(url); 
      if (response.IsSuccessStatusCode) 
      { 
       var json = await response.Content.ReadAsStringAsync(); 
       //deserialize into client class Newtonsoft JSON used here 
       var lst = JsonConvert.DeserializeObject<List<StateInfo>>(json); 
       states.AddRange(lst); 
      } 
      else 
      { 
       //notify of failed web call here 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     //notify of error 
    } 
    return states; 
} 
+0

Ich habe versucht, genau das gleiche zu tun (mit Base-Adresse, mit MediaTypeWithQualityHeaderValue, Aufruf derselben Methoden (aber mit meinem URI), kein Glück, immer noch genau der gleiche Fehler, ich habe das Gefühl, dass es nicht direkt mit dem Code verwandt ist, aber ich kann nicht finden, mit was es dann verbunden ist. – J4N

+0

jemanden mit dem gleichen Fehler gefunden, aber auf IOT - endete als eine Firewall-Konfiguration Problem ... http://stackoverflow.com/questions/32489813/httpclient-in- Universal-Windows-app-running-on-windows-10-iot-Core-Würfe-außer –

+0

Ich habe überprüft, aber zur Zeit habe ich keine aktive Firewall (auch die Windows ist deaktiviert). Und ich habe auch keine Antivirus Ich habe gerade versucht, Visual Studio als Administrator zu starten, kein Glück :( – J4N

1

Erfahren Sie das 0x80072efd Problem. Hat mich Stunden gekostet, wenn nicht Tage zu lösen. Die Lösung, die für mich gearbeitet wurde der folgende Befehl von einem Admin-Eingabeaufforderung:

netsh winhttp reset proxy

+0

ganz Kuh. Vielen Dank! –

Verwandte Themen