2017-03-09 1 views
1

Zunächst einmal werde ich anerkennen, dass es viele Fragen in der Nähe meines hier gibt, aber ich habe jede Lösung ausprobiert, die ich auf SO finden kann bin immer noch fest.http.post Einfaches Objekt von angularJS bis C# Web api entweder null oder alle Eigenschaften sind null

Meine Service-Methode in meinem service.js ist wie folgt, mit Kommentaren;

postSimpleObject: function() { 

    // Have tried this first, and have passed 
    // as JSON.stringify(simpleObject) 
    var simpleObject = { 
     name: "J Doe", 
     colour: "Red" 
    }; 

    // tried to pass this next 
    var simplerObject = '{ "Name": "J Done", "Colour":"Red"}'; 

    // escaped the quotations and tried this next 
    var simplerObject2 = '{ \"Name\": \"J Done\", \"Colour\":\"Red\"}'; 

    return $http.post(apiUrl + "PostSimpleObject?item=" + JSON.stringify(simpleObject), { 
     headers: { 
      'Content-Type': 'application/json' 
     } 
    }); 
} 

Hier ist meine API-Controller-Funktion auf der API-Seite;

public class CrudUserApiController : ApiController 
{ 

    [System.Web.Http.HttpPost] 
    public void PostSimpleObject(SimpleObject item) 
    { 
     var itemReceived = item; 
    }  
} 

meine einfache Objektklasse, auf der Api-Seite;

public class SimpleObject 
{ 
    public string Name { get; set; } 
    public string Colour { get; set; } 

} 

Nun, was passiert ist;

  • Die API-Methode ausgelöst wird, kann der Routing-Controller und ein Verfahren lokalisieren
  • Das Modell/empfangene Objekt eine neue SimpleObject für beide Mitglieder mit null Eigenschaften ist

Gemäß den Ausführungen in der Ich habe versucht, ein Stringed-Objekt, eine JSON-Zeichenfolge und eine Escape-JSON-Zeichenfolge zu übergeben.

Auch auf der API-Seite habe ich versucht, mit dem [FromBody] -Attribut vor dem SimpleObject-Argument in der Signatur. Das Gleiche passiert.

Ich bin total verloren, würde einige Hilfe sehr geschätzt werden. Vielen Dank.

+0

Warum die Daten an die URI anhängen? Hast du das hier probiert? http://stackoverflow.com/a/20226220/5724584 – Vahid

+1

haben Sie versucht, '$ http.post (apiUrl + "PostSimpleObject", simpleObject, { Header: { 'Content-Type': 'application/json' } '? – eminlala

+0

Gibt es einen Grund, warum Sie Ihre Daten als Parameter übergeben (namens' item')? – lealceldeiro

Antwort

1

Es wäre ratsam, den Inhalt auf dem Hauptteil anstatt auf dem Querystring aus einer Anzahl von Gründen, wie Querystring-Längenbeschränkungen zu veröffentlichen.

Das heißt, wenn Sie über die Verwendung der Abfragezeichenfolgeflag bestehen, müssen Sie WebAPI sagen, auf die Abfragezeichenfolgeflag für die Daten, die die FromUri Attribut zu suchen, da der Standard der Körper:

[System.Web.Http.HttpPost] 
public void PostSimpleObject([FromUri]SimpleObject item) 
{ 
    var itemReceived = item; 
}  

Alternativ Sie den Inhalt auf dem Körper hinterlassen direkt als durch ex0dm3nt rief:

$http.post(apiUrl + "PostSimpleObject", simpleObject); 
+0

Vielen Dank. Ich bin mir nicht sicher, warum ich die Querystring - in Wirklichkeit war mir nicht bewusst, dass Sie den Körper direkt so übergeben könnten. – Aeptitude

+0

@Aeptitude Sie sind willkommen! Entweder wird technisch die meiste Zeit arbeiten, aber der Körper ist in der Regel der erwartete Mechanismus für Daten für Beiträge und Puts. –

1

Sie müssen nur Ihre simpleObject als zweiten Parameter in der $post Anfrage wie folgt passieren:

postSimpleObject: function() { 
    var simpleObject = { 
     name: "J Doe", 
     colour: "Red" 
    }; 

    return $http.post(apiUrl + "PostSimpleObject", simpleObject); 
} 
Verwandte Themen