Autor Beitrag
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Di 12.11.19 09:23 
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:

ausblenden 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Mi 13.11.19 07: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 sollte das doch genau so funktionieren.

Wireshark-Hex
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4482
Erhaltene Danke: 924


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 13.11.19 09:55 
Möglicherweise unterdrückt XMLHttpRequest den Body. Ein GET hat üblicherweise keinen Body.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4316
Erhaltene Danke: 926

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Mi 13.11.19 10:15 
Steht ja auch so in der verlinkten 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Do 14.11.19 14: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!!!