Entwickler-Ecke

ASP.NET und Web - Kein Content bei ApiController GET


doublecross - Di 12.11.19 10:23
Titel: Kein Content bei ApiController GET
Hallo,

irgendwo muss ich einen ganz blöden Fehler machen, den ich nicht sehe, vielleicht könnt Ihr mir die Augen offen.
Ich möchte eine kleine WebAPI entwickeln, welche per JavaScrippt genutzt werden soll. Da beide Teile auf dem gleichen Integrierten System laufen sollen, bin ich auf das .NET Framework 4.0 einen Webbrowser (integriert in eine Fremdanwendung) beschränkt, dessen Fähigkeiten irgendwo zwischen dem IE8 und IE 11 liegen. Features die weniger als 10 Jahre alt sind lassen sich also nicht nutzen.
Daher sieht meine JS Implementation, welche meine eigene SendMessage Funktion aufrufen soll so aus:


JavaScript-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function SendMessage(Receiver, Message) {
    let Adress = "http://" + BASEADRESS + "/api/messages/send";
    let Data = {
        'clientid': APICLIENTID,
        'receiver': Receiver,
        'message': Message
    };
    let request = new XMLHttpRequest();
    request.open("GET", Adress, false);
    request.setRequestHeader("Content-Type""application/json;charset=UTF-8");
    request.send(JSON.stringify(Data));
    return request.responseText;
}


Auf Server Seite nutze ich einen HttpSelfHostServer und implementiere im MessagesController diese Get Methoden:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
public HttpResponseMessage Get(string command, string id, [FromBody] JObject Data)
{
  {...}
}

public HttpResponseMessage Get(string command, [FromBody] JObject Data)
{
  return Get(command, string.Empty, Data);
}


Wenn ich einen Breakpoint in diese setze kann ich erkennen, dass sie auch aufgerufen werden, allerdings muss ich auch erkennen, dass der Parameter Data leer bleibt. Dies übrigens auch denn ich den Datentypt auf string setze. Auch beim untersuchen der Request Eigenschaft des ApiController wird mir angezeigt, dass der content leer ist.

Ich versehe nur nicht warum. Habt ihr eine Idee?


doublecross - Mi 13.11.19 08:57

Zwischenstand:

Ich habe mit die Kommunikation zwischen Server und JavaSkript Client einmal mittels WireShark angesehen (siehe unten). Interessant finde ich, dass ich auch hier den Inhalt des Bodys nicht finde.

Nach meinem Verständnis sollen sich in der Übertragung zumindest Schlüsselworte wie "clientid" oder "message" finden lassen, eben das was die Anweisung JSON.stringify(Data) zurück gibt (und das sie ein Ergebnis liefert habe ich per console.log() ausgabe überprüft).

Somit scheint mir das Problem auf JavaSkript Seite zu liegen. Nur sehe ich auch hier nicht was ich falsch mache. Laut Dokumentation [https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send] sollte das doch genau so funktionieren.

Wireshark-Hex


Ralf Jansen - Mi 13.11.19 10:55

Möglicherweise unterdrückt XMLHttpRequest den Body. Ein GET hat üblicherweise keinen Body.


Th69 - Mi 13.11.19 11:15

Steht ja auch so in der verlinkten XMLHttpRequest.send() [https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send]:
Zitat:
If the request method is GET or HEAD, the body parameter is ignored and the request body is set to null.

Probiere daher mal "POST".


doublecross - Do 14.11.19 15:14

Hallo Ihr beiden und ganz herzlichen dank.

Ich sagte doch, dass ich einen ganz blöden Fehler machen muss, und genau der war es. Sprich mit Post klappt alles. Dankeschön!!!