Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
ASP.NET MVC - HttpWebRequest Authentication Header setzen
Pico1184
myCSharp.de - Member

Avatar #avatar-2893.jpg


Dabei seit:
Beiträge: 223
Herkunft: Karlsruhe

Themenstarter:

ASP.NET MVC - HttpWebRequest Authentication Header setzen

beantworten | zitieren | melden

Hallo,

ich möchte einen REST Service in meiner ASP.NET MVC Anwendung verwenden und muss mich dazu entsprechend Authentifizieren. Dazu habe ich einen apiKey bekommen. Der ApiKey muss nun in den Request Header eingebunden werden.

Beispiel der Dokumentation:

curl -H "x-netscan-auth: xxxxxx" -i https://api.netscan.co/scan

Nachfolgend habe ich das versucht so umzusetzen:


var request = (HttpWebRequest)WebRequest.Create("https://api.netscan.co/user/turn");

var data = Encoding.ASCII.GetBytes(jsonString);
var apiKey = "XXXXXXXXXXXXXXXXXXXXX";
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = data.Length;
request.Headers.Add($"x-netscan-auth: {apiKey}", "https://api.netscan.co/scan");

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

Leider funktioniert das so nicht (Exception: unzulässige Zeichen im Header). Mache ich da grundlegend etwas falsch bzw, ist das die richtige Vorgehensweise oder muss ich noch etwas encodieren???

Grüße Pico
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Pico1184 am .
private Nachricht | Beiträge des Benutzers
HiGHteK
myCSharp.de - Member



Dabei seit:
Beiträge: 114

beantworten | zitieren | melden

Hallo Pico1184,

ein Header besteht aus einem Schlüssel und einem Wert, du hast allerdings Schlüssel UND Wert als Schlüssel angegeben.
Versuch es mal so..

request.Headers.Add("x-netscan-auth", apiKey);
(siehe auch WebHeaderCollection.Add-Methode: (String,String))

Denn nur der Teil "x-netscan-auth: xxxxxx" beschreibt den Header im curl-Aufruf, die URL is dagegen einfach die Adresse unter der der Endpunkt erreichbar ist und somit nicht Teil des Headers.

Grüße, HiGHteK

PS: REST-Services lassen sich IMHO sehr viel komfortabler mittels RestSharp komsumieren..so als kleiner Tip ;)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von HiGHteK am .
private Nachricht | Beiträge des Benutzers
Deaktiviertes Profil
myCSharp.de - Member



Dabei seit:
Beiträge: 985

beantworten | zitieren | melden

Und du kannst den Code erheblich verkürzen auf


var request = (HttpWebRequest)WebRequest.Create("https://api.netscan.co/user/turn");
var apiKey = "XXXXXXXXXXXXXXXXXXXXX";
request.Method = "POST";
request.Content = new StringContent( jsonString, Encoding.UTF8, "application/json" );
request.Headers.Add("x-netscan-auth", apiKey );

var response = (HttpWebResponse)request.GetResponse();
...
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
Zitat von Sir Rufo
Und du kannst den Code erheblich verkürzen

Aber nicht mit HttpWebRequest. Wäre mir zumindest neu.
Dazu braucht es HttpRequestMessage.

Siehe auch HttpRequest vs HttpRequestMessage vs HttpRequestBase

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers