使用 angular 执行 GET 传递复杂对象
Doing a GET passing a complex object with angular
我正在使用 AngularJs 和资源模块。我想做一个 GET 来获取一个对象。要执行这个 GET,我不必简单地将 ID 传递给服务器,但我应该传递一个具有不同属性和值的复杂对象..
这里是我使用的代码:
$scope.getActivationStatus = function (event) {
event.preventDefault();
if ($scope.segui_attivazione_form.$valid) {
$scope.activationStatus =
new SeguiAttivazioneService
.seguiAttivazione()
.$get(
{
request: $scope.activationStatus
}, function () { });
}
};
在服务器端我有:
[HttpGet]
public IHttpActionResult GetActivationStatus(MyComplexObject request)
{
//I will do something here later...
return Ok();
}
问题是 "request" 到达服务器时等于 NULL...
我已经解决了将两个字符串传递给服务器的问题......以这种方式:
$scope.getActivationStatus = function (event) {
event.preventDefault();
if ($scope.segui_attivazione_form.$valid) {
$scope.activationStatus =
new SeguiAttivazioneService
.seguiAttivazione()
.$get(
{
codiceFiscale: $scope.activationStatus.CodiceFiscale,
codiceRichiesta: $scope.activationStatus.CodiceRichiesta
}, function () { });
}
};
服务器端:
[HttpGet]
public IHttpActionResult GetActivationStatus(string codiceFiscale, string codiceRichiesta)
{
return Ok();
}
以这种方式一切正常...但我不喜欢这个解决方案,因为我将有两个以上的输入...
这是获取,而不是 post(不是保存,更新)...
如何通过 GET 传递复杂对象?
谢谢...
如果要在请求的body
中发送数据,最好使用POST
方式。虽然可以使用 Angular,但某些服务器可能会忽略 GET
请求的主体。
请求正文只能由POST发送。使用 get,您最多可以 URL 对 OBJECT 进行编码,然后将其作为查询字符串参数发送。但这不是 post 一些数据到服务器
的最佳解决方案
这种方法允许发送带有数组和子对象的复杂对象:
Angular:
$http({
url: '/myApiUrl',
method: 'GET',
params: { param1: angular.toJson(myComplexObject, false) }
})
C#:
[HttpGet]
public string Get(string param1)
{
Type1 obj = new JavaScriptSerializer().Deserialize<Type1>(param1);
...
}
这不是一个优雅的解决方案,但它可以使用 HTTP GET:
$http.get(url + "?" + $.param(obj).replace(/%5b([^0-9].*?)%5d/gi, '.'))
它将复杂的对象转换成一个字符串,用点符号来定义级别。大多数服务器端框架,如 ASP.NET Core 都可以将其绑定到复杂的对象。
这是我为复杂对象发送的字符串示例:
开始日期=2021-06-11&结束日期=2021-06-11&TimeRange.TimeFrom.Time=07%3A00&TimeRange.TimeFrom.Time帧=AM&TimeRange.TimeTo.Time=10%3A00&TimeRange.TimeTo.Time帧=上午
我正在使用 AngularJs 和资源模块。我想做一个 GET 来获取一个对象。要执行这个 GET,我不必简单地将 ID 传递给服务器,但我应该传递一个具有不同属性和值的复杂对象..
这里是我使用的代码:
$scope.getActivationStatus = function (event) {
event.preventDefault();
if ($scope.segui_attivazione_form.$valid) {
$scope.activationStatus =
new SeguiAttivazioneService
.seguiAttivazione()
.$get(
{
request: $scope.activationStatus
}, function () { });
}
};
在服务器端我有:
[HttpGet]
public IHttpActionResult GetActivationStatus(MyComplexObject request)
{
//I will do something here later...
return Ok();
}
问题是 "request" 到达服务器时等于 NULL... 我已经解决了将两个字符串传递给服务器的问题......以这种方式:
$scope.getActivationStatus = function (event) {
event.preventDefault();
if ($scope.segui_attivazione_form.$valid) {
$scope.activationStatus =
new SeguiAttivazioneService
.seguiAttivazione()
.$get(
{
codiceFiscale: $scope.activationStatus.CodiceFiscale,
codiceRichiesta: $scope.activationStatus.CodiceRichiesta
}, function () { });
}
};
服务器端:
[HttpGet]
public IHttpActionResult GetActivationStatus(string codiceFiscale, string codiceRichiesta)
{
return Ok();
}
以这种方式一切正常...但我不喜欢这个解决方案,因为我将有两个以上的输入... 这是获取,而不是 post(不是保存,更新)...
如何通过 GET 传递复杂对象?
谢谢...
如果要在请求的body
中发送数据,最好使用POST
方式。虽然可以使用 Angular,但某些服务器可能会忽略 GET
请求的主体。
请求正文只能由POST发送。使用 get,您最多可以 URL 对 OBJECT 进行编码,然后将其作为查询字符串参数发送。但这不是 post 一些数据到服务器
的最佳解决方案这种方法允许发送带有数组和子对象的复杂对象:
Angular:
$http({
url: '/myApiUrl',
method: 'GET',
params: { param1: angular.toJson(myComplexObject, false) }
})
C#:
[HttpGet]
public string Get(string param1)
{
Type1 obj = new JavaScriptSerializer().Deserialize<Type1>(param1);
...
}
这不是一个优雅的解决方案,但它可以使用 HTTP GET:
$http.get(url + "?" + $.param(obj).replace(/%5b([^0-9].*?)%5d/gi, '.'))
它将复杂的对象转换成一个字符串,用点符号来定义级别。大多数服务器端框架,如 ASP.NET Core 都可以将其绑定到复杂的对象。
这是我为复杂对象发送的字符串示例:
开始日期=2021-06-11&结束日期=2021-06-11&TimeRange.TimeFrom.Time=07%3A00&TimeRange.TimeFrom.Time帧=AM&TimeRange.TimeTo.Time=10%3A00&TimeRange.TimeTo.Time帧=上午