Abend,
ich möchte gerne Daten (JSON) an eine REST API schicken.
Laut Anleitung soll ich im Header einen ApiKey und eine ApplicationElementId mitschicken.
Aber egal ob mit den Daten oder ohne, ich bekomme immer: "401 Nicht autorisiert"
var request = (HttpWebRequest)WebRequest.Create(txtHostURL.Text);
var data = Encoding.ASCII.GetBytes(ultimoRest.GetJsonFromObject(dataObj));
request.Headers.Add("ApiKey", txtApiKey.Text);
request.Headers.Add("ApplicationElementId", txtAppElementId.Text);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
}
catch (System.Net.WebException webEx)
{
txtResponse.Text = webEx.ToString();
}
Evtl hat ja jemand eine Idee wo da der Fehler liegt.
Danke schon mal im Vorraus
Gruß Simon
Verwende den HttpClient; der wird seit Jahren für genau solche Dinge ausdrücklichst empfohlen.
Wenn Du Dir es besonders einfach machen willst, dann bastel Dir selbst ein API SDK mit Refit.
Und den dran Deine Code-Schichten nicht so zu mischen... [Artikel] Drei-Schichten-Architektur
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Abt
danke für deine Tip.
Hast du evtl eine gute Anleitung oder Tutorial für den HttpClient?
Leider findet man dazu bei den Suchmaschinen ja nicht gerade wenig 😉
Und was ist "Refit" ?
Gruß Simon
Und was ist "Refit" ?
Google-Suche nach c# refit
Da siehste auch sauber den Einsatz vom HttpClient (wie auch in der Microsoft Doku).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Eine Frage hätte ich noch.
Ich muss ja meine Daten an eine Webseite senden, dort habe ich folgende Möglichkeiten
wäre da REST auch die beste / zukunftssicherste Lösung?
wäre da REST auch die beste / zukunftssicherste Lösung?
Ja (Disclaimer: Meine Meinung, gibt bestimmt welche die das anders sehen)
Allerdings wirfst du hier Äpfel und Birnen zusammen
REST
HTTP POST
SOAP
REST ist ein Paradigma, dass besagt wie du deine Struktur aufbaust, so wie SOAP
POST ist eine der Request-Arten die via HTTP möglich sind (GET, POST, PUT, DELETE - um nur die wichtigsten zu nennen, siehe hierzu auch CRUD).
Die Frage ob REST oder HTTP macht also eigentlich keinen Sinn.
Beste Grüße
emuuu
2+2=5( (für extrem große Werte von 2)
Eine Frage hätte ich noch.
Ich muss ja meine Daten an eine Webseite senden, dort habe ich folgende Möglichkeiten
- REST
- HTTP POST request mit XML Body
- SOAP (XML)
wäre da REST auch die beste / zukunftssicherste Lösung?
Zukunftssicher ist in dem Bereich relativ. Ich werf mal als Begriff noch gRPC in den Ring.
(Im übrigen gilt, was emuuu gesagt hat.)
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Und grundsätzlich wäre natürlich ein Link zu der entsprechenden API Dokumentation auch hilfreich, da können wir evtl. mehr mit anfangen anstatt mit dem Codefragment das offensichtlich nicht funktioniert.
Grundsätzlich kann es nämlich sein das du den API Key nicht im Header übertragen mußt, oder der Key anders heißen muß, oder der Wert unter Umständen noch speziell formatiert sein muß etc.
Das alles würde evtl. aus der Doku hervorgehen.
Weitere mögliche Fehlerquelle ist natürlich auch das du die Werte scheinbar aus einer Textbox ausliest.
Hier können sich natürlich auch Fehler einschleichen. Leerzeichen am Anfang oder am Ende etc.
Oder du benutzt gar das falsche Textbox Element (weil du sie verkehrt benannt hast etc.)