2017-02-27 3 views
0

Ich benutze eine $ Ressource, um Daten vom Server zu erhalten, die einen ASP.NET MVC Controller von meinem Winkelcontroller aufrufen. Der Wert (des Typs Dezimal?) Wird korrekt vom MVC-Controller zurückgegeben, aber wenn das Versprechen aufgelöst wird, ist sein Parameter nur ein leeres Objekt und nicht der erwartete Wert.

$ Ressourcendatei:

angular 
    .module('app') 
    .service('datacontext', function ($rootScope, $resource) { 

    return { 
      emissions: $resource('/api/emissions/:id', { 'id': '@id', emissionId: '@emissionId' }, 
      {      
       create: { method: 'POST' }, 
       lock: { method: 'PUT', url: "/api/emissions/lock" }, 
       getFxRate: { method: 'GET', isArray: false, url: '/api/emissions/getfxrate'} 
      }) 
    } 

ASP.NET MVC-Controller

[HttpGet] 
[Route("/api/emissions/getfxrate")] 
public async Task<IHttpActionResult> GetFxRate(string currency) 
{ 
    var res = await _emissionsAppService.GetFxRateAsync(currency); 

    //Here I get properly a decimal value as expected. (eg. 1.07123) 
    return Ok(res); 
} 

Winkelregler:

function getRate(currency){ 
    datacontext.emissions.getFxRate({ currency: currency}) 
    .$promise.then(function (result) { 

     //Here result is just an empty object {} 
    } 
    } 

Ich kann nicht verstehen, was fehlt, um den Wert vom Server zum Client-Controller zurück zu bekommen.

Antwort

0

Das aufgelöste Versprechen war leer, da ein JSON-Objekt erwartet wird, während ich einen primitiven Wert zurückgab.

Ich könnte es beheben, indem ich den folgenden Code zu meiner Ressource $ hinzufügen. Sobald ich ein Objekt zurückgab, konnte ich den Wert innerhalb des Versprechens richtig festhalten:

getFxRate: { 
    method: 'GET', 
    isArray: false, 
    url: '/api/emissions/getfxrate', 
    transformResponse: function (data) { 
      return { fxRate: data }; 
     } 
    } 
Verwandte Themen