Я пытаюсь создать простое веб-приложение MVC с вызовом WebAPI и AngularJS. Внешний интерфейс имеет MD-кнопку с методом ng-click, определенным в контроллере. Когда я заполняю поля и нажимаю на кнопку, он должен перейти в angular Controller => factory =>, вызвать Web Api и вернуть результат. Но после первого щелчка ничего не возвращается, тогда как, если я нажимаю на ту же кнопку во второй раз, он получает данные. Я не могу понять, почему это происходит?
Index.cshtml
<md-button ng-click="GetResponse()" class="md-raised md-primary">
Get Response
</md-button>
Controller.js
$scope.GetResponse = function () {
debugger;
//Hardcodes the values, but still does not work
$scope.edm.shortDescription = 'SDesc';
$scope.edm.detailDescription = 'DDesc';
$scope.edm.changeType = $("#ddlChangeType")[0].innerText;
$scope.edm.category = 'CategoryName';
$scope.edm.application = 'AppName';
PrepareRequestService.GetFullRequest($scope.edm).then(function (d) {
$scope.fullRequest = d.data;
}, function (e) {
alert('Failed');
});
console.log(JSON.stringify($scope.fullRequest));
//This is the line I am getting null first and then value after second click.
}
Service.js
myAppModule.factory('PrepareRequestService', function ($http) {
var fac = {};
fac.GetFullRequest = function (edm) {
debugger;
//Here the Api Url is constructing properly
console.log('http://localhost:17669/api/PrepareRequest/' + edm.shortDescription + '/'
+ edm.detailDescription + '/'
+ edm.changeType + '/'
+ edm.category + '/'
+ edm.application + '/');
//This is the actual call to API
return $http.get('http://localhost:17669/api/PrepareRequest/' + edm.shortDescription + '/'
+ edm.detailDescription + '/'
+ edm.changeType + '/'
+ edm.category + '/'
+ edm.application + '/');
};
return fac;
});
Веб-API:
// GET: api/PrepareRequest/sDescription/dDescription/changeType/category/application
public RootObject Get(string sDescription, string dDescription, string changeType, string category, string application)
{
RequestBuilder p = new RequestBuilder();
RootObject ro = new RootObject();
ro = p.PopulatePPMParameter(application, sDescription, "Today", "myName", changeType, category);
return ro;
}
// При попытке в браузере этот API возвращает точные данные в формате JSON, которые я получаю после второго нажатия GetResponse. Но мне нужно получать это в каждом клике.