Как я могу отправить параметры в свой http-запрос с помощью AngularJS?
Я использую следующий код:
$http({
method: 'GET',
url: '/Admin/GetTestAccounts',
data: { applicationId: 3 }
}).success(function (result) {
$scope.testAccounts = result;
});
Код отправляет на мой сервер следующее:
http://127.0.0.1:81/Admin/GetTestAccounts
Когда это будет получено моим контроллером MVC:
[HttpGet]
public virtual ActionResult GetTestAccounts(int applicationId)
{
var testAccounts =
(
from testAccount in this._testAccountService.GetTestAccounts(applicationId)
select new
{
Id = testAccount.TestAccountId,
Name = testAccount.Name
}
).ToList();
return Json(testAccounts, JsonRequestBehavior.AllowGet);
}
Он жалуется, что нет приложения.
Словарь параметров содержит нулевую запись для параметра 'applicationId' типа, отличного от nullable 'System.Int32' для метода
Может кто-нибудь объяснить, почему приложение не отправляется в качестве параметра? Раньше я делал это со следующим кодом Angular, и он работал нормально:
$.ajax({
url: '/Admin/GetTestAccounts',
data: { applicationId: 3 },
type: 'GET',
success: function (data) {
eViewModel.testAccounts(data);
}
});
Ответы
Ответ 1
Если вы не хотите использовать jQuery $.param, вы можете использовать поле параметра $http, которое сериализует объект.
var params = {
applicationId: 3
}
$http({
url: '/Admin/GetTestAccounts',
method: 'GET',
params: params
});
Ответ 2
Хорошо, я постараюсь ответить на это.
Я думаю, что проблема заключается в том, что angularjs предполагают, что данные, переданные в http, будут urlencoded. Я не уверен, почему angular не сериализует его неявно, если есть объект. Поэтому вы должны сами его закодировать:
$http({
method: 'GET',
url: '/Admin/GetTestAccounts',
data: 'applicationId=3'
})
или используйте параметр jQuery для его кодирования:
$http({
method: 'GET',
url: '/Admin/GetTestAccounts',
data: $.param({ applicationId: 3 })
})