2016-02-18 2 views
0

у меня есть контроллер Api Web, который содержит следующий метод:Решенного обещание не содержит никаких данных

[Route("CountThings/{id}")] 
[HttpGet] 
public async Task<IHttpActionResult> CountThings(int id) 
{ 
    //var numberOfThings = await _thingsRepository.CountThingsAsync(id); 
    return Ok(123456); 
} 

Как вы можете видеть, я всегда возвращающийся Ok с 123456 в качестве данных. Это предназначено только для тестирования.

В моем угловом файле ресурсов у меня есть это:

getCountThings: { 
    method: 'GET', 
    url: controllerPath + 'CountThings/:id', 
    params: { id: '@id' } 
} 

И в моем угловом контроллере у меня есть это:

thingsResource.getCountThings({ id: scope.id }) 
.$promise 
.then(function (data) { 
    console.log(data); 
    scope.numberOfThings = data; 
}); 

Когда я отлаживать я могу видеть, что контроллер API называется и возвращается правильно. В моем угловом контроллере я вижу, что обещание было разрешено, когда я регистрирую данные. Но я не могу найти способ получить данные, которые должны быть возвращены (123456). Если я регистрирую данные. $ Resolved, это возвращает true.

Как получить доступ к данным, которые я хочу использовать в контроллере?

ответ

1

Вы не можете получить примитивы с использованием углового $resource. Попробуйте возвращения объекта JSON от сервера (как { data: 123456 }):

thingsResource.getCountThings({ id: scope.id }) 
.$promise 
    .then(function (result) { 
     scope.numberOfThings = result.data; 
    }); 

Смотрите эту issue и объяснение, почему ресурс должен быть объектом.

Альтернатива заключается в использовании $http услуги:

$http.get(controllerPath + 'CountThings/' + scope.id).then(function (result) { 
    scope.numberOfThings = result.data; 
}); 

В этом случае вам не нужно изменить что-либо на сервере.

Смежные вопросы