Laden...

ASP.NET MVC - HttpWebRequest Authentication Header setzen

Erstellt von Pico1184 vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.610 Views
Pico1184 Themenstarter:in
223 Beiträge seit 2009
vor 7 Jahren
ASP.NET MVC - HttpWebRequest Authentication Header setzen

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

H
114 Beiträge seit 2007
vor 7 Jahren

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 😉

D
985 Beiträge seit 2014
vor 7 Jahren

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();
...

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

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