Ich habe einen HttpClient, den ich für eine REST-API verwende. Ich habe jedoch Probleme beim Einrichten des Autorisierungsheaders. Ich muss den Header auf das Token setzen, das ich von meiner OAuth-Anfrage erhalten habe. Ich habe Code für .NET gesehen, der Folgendes vorschlägt:
httpClient.DefaultRequestHeaders.Authorization = new Credential(OAuth.token);
Die Credential-Klasse ist in WinRT jedoch nicht vorhanden. Hat jemand eine Idee, wie man den Autorisierungsheader setzt?
c#
rest
oauth
windows-runtime
Stephen Hynes
quelle
quelle
Antworten:
Der Weg, dies zu tun, ist der folgende:
quelle
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "encrypted user/pwd");
Entschlüsselte Benutzer / pwd von der Chrome-Erweiterung des Advanced Rest Client nehmen.quelle
Ich suche nach einem guten Weg, um mit diesem Problem umzugehen, und ich sehe die gleiche Frage. Hoffentlich hilft diese Antwort jedem, der das gleiche Problem hat, wie ich.
Referenz von https://www.theidentityhub.com/hub/Documentation/CallTheIdentityHubApi
quelle
using
Block einfügen . (Ja, ich weiß, es klingt rückwärts, aber Sie werden Verbindungen verlieren, wenn Sie verwenden,using
anstatt nur den HttpClient zu recyceln.)Da es eine gute Praxis ist, die HttpClient-Instanz für Leistungs- und Port-Erschöpfungsprobleme wiederzuverwenden , und weil keine der Antworten diese Lösung bietet (und Sie sogar zu schlechten Praktiken führt :(), habe ich hier einen Link zu der Antwort eingefügt, die ich gegeben habe zu einer ähnlichen Frage:
https://stackoverflow.com/a/40707446/717372
Einige Quellen zur richtigen Verwendung von HttpClient:
quelle
Ich stimme der Antwort von TheWhiteRabbit zu, aber wenn Sie viele Anrufe mit HttpClient haben, scheint sich der Code meiner Meinung nach etwas zu wiederholen.
Ich denke, es gibt zwei Möglichkeiten, die Antwort ein wenig zu verbessern.
Erstellen Sie eine Hilfsklasse, um den Client zu erstellen:
Verwendungszweck:
Erstellen Sie eine Erweiterungsmethode:
Gewinnt keinen Schönheitspreis, funktioniert aber großartig :)
Verwendungszweck:
Wiederum denke ich, dass 2 der oben genannten Optionen den Client mit der Anweisung etwas weniger repetitiv machen. Denken Sie daran, dass es empfehlenswert ist, den HttpClient wiederzuverwenden, wenn Sie mehrere http-Aufrufe tätigen, aber ich denke, dass dies für diese Frage etwas unumgänglich ist.
quelle
Ich habe den Inhaber-Token gesetzt
Es funktionierte an einem Endpunkt, aber nicht an einem anderen. Das Problem war , dass ich kleingeschrieben hatte
b
auf"bearer"
. Nach dem Wechsel funktioniert es jetzt für beide APIs, die ich treffe. So leicht zu übersehen, wenn Sie es nicht einmal als einen der Heuhaufen betrachten, um nach der Nadel zu suchen.Stellen Sie sicher, dass Sie
"Bearer"
- mit Kapital haben.quelle
Ich schlage Ihnen vor:
Und dann können Sie es so verwenden:
quelle
So legen Sie die Basisauthentifizierung mit C # HttpClient fest Der folgende Code funktioniert für mich.
quelle
So habe ich es gemacht:
Dieses You-Tube-Video hilft mir sehr. Bitte probieren Sie es aus. https://www.youtube.com/watch?v=qCwnU06NV5Q
quelle
Verwenden Sie grundlegende Autorisierungs- und Json-Parameter.
quelle
Wenn Sie das wiederverwenden möchten
HttpClient
, wird empfohlen, das nicht zu verwenden,DefaultRequestHeaders
da es zum Senden bei jeder Anfrage verwendet wird.Sie könnten dies versuchen:
quelle
6 Jahre später, aber dies hinzufügen, falls es jemandem hilft.
https://www.codeproject.com/Tips/996401/Authenticate-WebAPIs-with-Basic-and-Windows-Authen
quelle
UTF8-Option
quelle
Mit
AuthenticationHeaderValue
Klasse vonSystem.Net.Http
MontageWir können den vorhandenen
Authorization
Headerhttpclient
so einstellen oder aktualisieren :quelle
BaseWebApi.cs
SubWebApi.cs
quelle
Wenn Sie eine
HttpClient
Anfrage mit Bearer Token senden möchten , kann dieser Code eine gute Lösung sein:quelle
In net .core können Sie verwenden
oder
quelle
SetBasicAuthentication()
es standardmäßig nicht verfügbar ist. Es muss sich also um eine Erweiterungsmethode handeln. Wo ist es definiert?Es ist möglicherweise einfacher, eine vorhandene Bibliothek zu verwenden.
Die folgenden Erweiterungsmethoden werden beispielsweise mit Identity Server 4 https://www.nuget.org/packages/IdentityModel/ hinzugefügt.
quelle
Der Prozessablauf ist komplex und es gibt immer Platz für den einen oder anderen Fehler. Mein Vorschlag wird sein, immer den Boilerplate-Code und eine Reihe von Bibliotheken für den OAuth-Authentifizierungsfluss zu verwenden. Dies erleichtert Ihnen das Leben.
Hier ist der Link für die Bibliothek. OAuth-Bibliotheken für .Net
quelle
Dies könnte funktionieren, wenn Sie einen JSON oder eine XML vom Dienst erhalten und ich denke, dies kann Ihnen eine Vorstellung davon geben, wie die Header und der T-Typ auch funktionieren, wenn Sie die Funktionen MakeXmlRequest (Ergebnisse in xmldocumnet setzen) und MakeJsonRequest verwenden (Setzen Sie den JSON in die gewünschte Klasse, die dieselbe Struktur wie die JSON-Antwort hat.)
quelle
quelle
Dies kann beim Einstellen des Headers hilfreich sein:
quelle
HttpClient
nichtWebClient
.