2017-03-02 5 views
0

Ich benutze System.Net.Http HttpClient, um Githubs Rest-API aufzurufen.C# System.Net.HttpClient intermittierend 401 Mit Github API nicht autorisiert

Etwa 5 von 10 Anfragen, die ich mit dem unten generierten HTTP-Client mache, antworten mit "401 Unauthorized". Ich lege die gleiche URL und Header in Postbote und bekomme nie "401 nicht autorisierte" Antworten. Offensichtlich ist mein Problem auf der Client-Seite.

Eine vernünftige Suche ergab viele verschiedene Tipps. Am häufigsten wurde ein HttpHandler oder Webrequest verwendet, aber es ist immer noch nicht klar, warum einige Anfragen fehlschlagen. Meine besten Vermutungen waren, dass Github gelegentlich umleitet und der Client nicht gut damit umgeht. Ich sah einige Referenzen über das Zwischenspeichern von Anmeldeinformationen, aber diese Beispiele zeigten alle das "NetworkCredential" -Objekt, aber für OAuth haben wir einfach das Bearer-Token in die Kopfzeile gesetzt, wie unten gezeigt, also bin ich mir nicht sicher, ob das für meinen Fall gilt.

Kann jemand die Ursache des Problems erklären?

 public static HttpClient GetClient(string bearerToken) 
    { 
     HttpClient client = new HttpClient(); 
     client.BaseAddress = _githubApiUri; 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_mediaTypeWithQualityHeaderValue)); 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken); 
     client.DefaultRequestHeaders.Add("User-Agent", "System.Net.Http Agent"); 
     return client; 
    } 

Antwort

1

Es stellte sich heraus, dass meine Uhr 15 Sekunden schnell, so dass die Token war ich zu erzeugen ungültig, da sie „aus der Zukunft“ aus Githubs Perspektive waren. Also, wenn ich mit einem Haltepunkt pausierte und zufällig 15 Sekunden oder länger wartete, würde es funktionieren.

Verwandte Themen