2017-01-04 2 views
0

ich folgende POST-Methode in meinem Web-API-Controller haben:

 [HttpPost] 
     public async Task<IHttpActionResult> Post(Hotspot hotspot) 
     { 
      try 
      { 
       int id = await SomeMethod(); 
       return Ok(id); 
      } 
      catch (ArgumentException e) 
      { 

       return BadRequest(e.Message); 
      } 
     } 

Und dann habe ich die POST-Anforderung machen und versuchen, die id zu erhalten:

var hotspots = $resource('/api/adminhotspots', { save: { method: 'POST' } }); 
hotspots.save($scope.hotspot).$promise.then(function (id) { 
    console.log(id); 
}); 

Leider bekomme ich eine , $ Promise-Objekt. Meine Konsole zeigt Folgendes an:

Ich kann überprüfen, dass der Server den Parameter korrekt in der Registerkarte Netzwerk in meiner Developer Console sendet. Und es ist in der Tat richtig.

Warum fängt die Ressource $ den Parameter nicht ab und was kann ich dagegen tun?

Vielen Dank!

+0

haben Sie versucht zu Entfernen Sie das. $ Versprechen. Da die Save-Methode bereits ein Versprechen –

+0

@ManuelObregozo gibt, habe ich, aber dann bekomme ich den folgenden Fehler: save(). Dann() ist keine Funktion .. – Ionna

Antwort

0

Weil ich es geschafft habe meine den falschen Punkt zu erkennen, in Code, werde ich selbst eine Antwort posten, damit anderen geholfen werden kann.

Es scheint, dass das Senden einer primitiven Variablen das Problem war. Der Client packt die vom Server empfangenen Daten in ein $ Ressourcenobjekt und die primitive Variable (int in meinem Fall) ist verloren.

Die Lösung war, die Ganzzahl als ein Objekt zu senden. Aus Gründen der Einfachheit werde ich hinzufügen, nur ein paar Klammern auf diese Variable wie in diesen Zeilen:

[HttpPost] 
public async Task<IHttpActionResult> Post(Hotspot hotspot) 
{ 
    try 
    { 
     int id = await SomeMethod(); 
     return Ok(new {id}); 
    } 
    catch (ArgumentException e) 
    { 

     return BadRequest(e.Message); 
    } 
} 

Auf dem Client die id können als solche erhalten:

hotspots.save($scope.hotspot).$promise.then(function (response) { 
    console.log(response.id); 
}); 
0

die folgenden Versuchen, sollte dies funktioniert:

var hotspots = $resource('/api/adminhotspots'); 
    hotspots.save($scope.hotspot,{}, function (response) { 
     console.log(respose); 
    }); 

Rememer, dass nicht-GET "Klasse" Aktionen Diese Parameter haben:

Resource.action([parameters], postData, [success], [error]) 
+0

Oh ja, ich habe es auch versucht, aber ich bekomme die genau dasselbe. Das ** Antwort ** -Objekt wird genauso aussehen. – Ionna

+0

$ scope.hotspot ist ein Parameter oder Daten zu buchen? Überprüfen Sie erneut, dass die Erfolgsfunktion der 3. Parameter sein muss. –

+0

$ scope.hotspot ist die Daten zu buchen, nicht der Parameter. Da die Parameter optional sind, wird die Funktion eindeutig als [Erfolg] -Parameter interpretiert. – Ionna

Verwandte Themen