Es ist nicht möglich, einfache Zeichenfolgendaten von AngularJS an die Web-API zu senden

7

Ich versuche, eine JSON-Zeichenfolge von meiner eckigen App zu einer Web-API zu bekommen. Ich habe in den letzten 6 Stunden im ganzen Internet nachgesehen und versucht, kläglich zu versagen, um herauszufinden, was ich falsch mache.

Ich habe die Netzwerkkonsole überprüft, und ich kann den JSON als Formulardaten sehen, aber mein WEB-API bekommt ihn aus irgendeinem Grund NICHT. Ich habe mir verschiedene andere Beiträge angeschaut, aber keine scheint mir bei meinem speziellen Problem geholfen zu haben. Jede Richtung wäre großartig. Ich habe bereits versucht, die "Transformation" zu verwenden, aber das hat nicht geholfen.

EINGABEPUNKTE ZUR WEB-API

%Vor%

ANGULARRUF

%Vor%

BEARBEITEN: Ich änderte den Winkelaufruf zu diesem

%Vor%

Die Web-API sieht so aus

%Vor%

Und das Modell

%Vor%

Ich bekomme immer noch einen Nullwert für DATA, etwas, das ich falsch eingerichtet habe?

    
Willy 16.11.2015, 19:09
quelle

2 Antworten

6

Ich glaube, Ihr Problem hängt von der WebApi-Controller-Methode ab, die erwartet, dass Sie eine Zeichenfolge erhalten, die Sie jedoch an ein Objekt übergeben. Trifft es zumindest die Methode, empfängt aber null?

Es hängt davon ab, was Sie an die WebApi-Controller-Methode senden möchten. Wenn Sie jedoch ein Objekt senden möchten, sollten Sie ein Modell erstellen, das dieses Objekt in Ihrem WebApi-Projekt darstellt, und die Methode ein Objekt als Parameter annehmen lassen.

Zum Beispiel, so wie Sie es jetzt haben, würden Sie etwas tun wie:

%Vor%     
mattherman 16.11.2015, 19:20
quelle
22

Obwohl Sie eine Lösung haben, gibt es einige Möglichkeiten zu POST einfache string Daten (kein Objekt) zu Web API Service.

Nehmen wir an, Sie haben eine POST-API wie diese (in Test ApiController)

%Vor%

Von AngularJS können Sie wie

zu dieser Methode posten

(1) Daten als JSON (Standard)

%Vor%

Dies wird Content-Type: application/json standardmäßig verwenden. Und der Server behandelt die Daten als JSON. Wenn Sie sich die Anfrage ansehen, sehen Sie, dass der Anfragetext eine einfache Zeichenfolge ist, wie

%Vor%

Für komplexe Objekte würden sie JSON-formatiert angezeigt.

(2) Daten als application/x-www-form-urlencoded (wie in Ihrem Beispiel)

%Vor%

Hier geben wir den Inhaltstyp explizit als application/x-www-form-urlencoded an, also müssen wir Daten in diesem Format senden (ähnlich der URL-Abfragezeichenfolge). Und hier ist der leere Schlüssel in den Daten , nur um die seltsame Modellbindungsanforderung von Web API zu erfüllen! Die resultierenden Daten werden wie

codiert %Vor%

was wir mit $.param({ "": "test" }) gemacht haben. Ein Grund dafür ist, dass FromBody hauptsächlich verwendet wird, um object , nicht einfache primitive Werte zu senden.

Also, das grundlegende Problem mit Ihrem Code war, Sie hatten Inhaltstyp angegeben: application / x-www-form-urlencoded und Sie sendeten die Daten als < em> JSON!

    
Arghya C 16.11.2015 20:37
quelle