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
POST Request an REST API bringt immer ein 401 Unauthorized
Grimmbizkit
myCSharp.de - Member



Dabei seit:
Beiträge: 310
Herkunft: Niederrhein

Themenstarter:

POST Request an REST API bringt immer ein 401 Unauthorized

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15827
Herkunft: BW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Grimmbizkit
myCSharp.de - Member



Dabei seit:
Beiträge: 310
Herkunft: Niederrhein

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15827
Herkunft: BW

beantworten | zitieren | melden

Zitat von Grimmbizkit
Und was ist "Refit" ?

Google-Suche nach c# refit
Da siehste auch sauber den Einsatz vom HttpClient (wie auch in der Microsoft Doku).
private Nachricht | Beiträge des Benutzers
Grimmbizkit
myCSharp.de - Member



Dabei seit:
Beiträge: 310
Herkunft: Niederrhein

Themenstarter:

beantworten | zitieren | melden

Eine Frage hätte ich noch.

Ich muss ja meine Daten an eine Webseite senden, dort habe ich folgende Möglichkeiten
1. REST
2. HTTP POST request mit XML Body
3. SOAP (XML)

wäre da REST auch die beste / zukunftssicherste Lösung?
private Nachricht | Beiträge des Benutzers
emuuu
myCSharp.de - Member

Avatar #avatar-4078.jpg


Dabei seit:
Beiträge: 286

beantworten | zitieren | melden

Zitat von Grimmbizkit
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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von emuuu am .
2+2=5 (für extrem große Werte von 2)
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Zitat von Grimmbizkit
Eine Frage hätte ich noch.

Ich muss ja meine Daten an eine Webseite senden, dort habe ich folgende Möglichkeiten
1. REST
2. HTTP POST request mit XML Body
3. 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)
private Nachricht | Beiträge des Benutzers
hummigbird1
myCSharp.de - Member

Avatar #avatar-3534.jpg


Dabei seit:
Beiträge: 127

beantworten | zitieren | melden

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.)
private Nachricht | Beiträge des Benutzers