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