使用 angularjs v 1.3 发布数据
Posting data with angularjs v 1.3
我有一个 web api 2.0 应用程序,我必须 post 表单数据。这是我的 js 代码:
(function (angular) {
var public_area = angular.module("public-area", ['ngResource']);
public_area.factory("MyService", function ($resource) {
return {
my_controller: $resource("/api/MyHttpControllerTest/")
};
});
public_area.controller("MyController", function ($scope, MyService) {
$scope.getPlans = function ()
{
var pianiTariffari =
new MyService
.my_controller
.query({
customerType: $scope.customerType
}, isArray = true);
}
$scope.sendInvitation = function ( )
{
var invitation =
new MyService
.my_controller(
{
request: {
CustomerType: "test"
}
});
invitation.$save();
}
});
})(angular);
你怎么看,我有一个控制器..和两个函数,1 个在 GET 中,1 个在 POST...
我看到你也是服务器端控制器
public FillFormPresentaUnAmicoResponse GetPromozioni(string customerType)
{
...
}
[HttpPost]
public PresentaUnAmicoResponse InvitaAmico(PresentaUnAmicoRequest request)
{
...
}
class PresentaUnAmicoRequest 是
public class PresentaUnAmicoRequest
{
public string CustomerType { get; set; }
}
GET 函数运行正常!但是 POST 不是...
在 post 中,我收到了 "request" 的有效实例,但其中的 属性 是 NULL...
对我来说真正奇怪的是,如果我这样调用Post方法:
var invitation = new MyService.my_controller(undefined);
invitation.$save();
服务器端,"request" 是实例化的..我期望 "request = null" 而不是..
谁能帮帮我?
谢谢
更新:
如果我理解,我需要始终使用相同的对象来坚持 REST 原则。因此,根据 spike 的示例,我相信我必须创建一个类似于此的对象:
public class Promos
{
public string CustomerType{ get; set; }
public List<string> PromoPerCustomerType{ get; set; }
}
public class PresentaAmico
{
public Promos Promozioni { get; set; }
public string Name{ get; set; }
public string Surname { get; set; }
...
}
而我的休息服务应该是这样的
[HttpGet]
public PresentaAmico Get(string customerType)
{
...
}
[HttpPost]
public void Save(PresentaAmico myForm)
{
...
}
是否正确?
恕我直言,这不是 $resouce 最佳工作方式,那是因为您没有真正遵守 REST 原则。 $resource 的想法是获取一个对象,修改它然后再次 $save 它,它映射到 GET 和 POST 调用,其中返回和正在发送的对象是相同的。
您正在获取 FillFormPresentaUnAmicoResponse 并POST获取另一种类型的对象,即 PresentaUnAmicoResponse。
这当然可以开始整个讨论您是否正在使用 REST,因为它可以与 WebAPI 一起使用:即资源,您可以通过在其上映射 HTTP 动词来修改它(GET/POST 等)您的控制器并没有真正遵守这些规则,因为您通过网络发送不同类型的对象。
所以我实际上会推荐 2 个控制器,每个类型一个:FillFormPresentaUnAmicoResponseController 和 PresentaUnAmicoResponseController。在这种情况下,我还会重新考虑命名 - 'response' 后缀没有必要。
var presenta = $resource('/presentaunamicoresponse/:id', { id:'@id'});
// The id doesn't make any sense here - which should raise the question on
// whether these stuff is really suitable for REST or whether you are really
// doing a remote procedure call, but OK.
presenta.CustomerType = 'Whatever';
presenta.$save();
我想这就是它的工作方式。为了保持一致性,您必须将其粘贴在工厂中。但是正如您在文档 ( https://docs.angularjs.org/api/ngResource/service/$resource ) 中看到的那样 - 您可以获得资源,并在资源本身上操作属性。然后调用 $save() 方法。
我有一个 web api 2.0 应用程序,我必须 post 表单数据。这是我的 js 代码:
(function (angular) {
var public_area = angular.module("public-area", ['ngResource']);
public_area.factory("MyService", function ($resource) {
return {
my_controller: $resource("/api/MyHttpControllerTest/")
};
});
public_area.controller("MyController", function ($scope, MyService) {
$scope.getPlans = function ()
{
var pianiTariffari =
new MyService
.my_controller
.query({
customerType: $scope.customerType
}, isArray = true);
}
$scope.sendInvitation = function ( )
{
var invitation =
new MyService
.my_controller(
{
request: {
CustomerType: "test"
}
});
invitation.$save();
}
});
})(angular);
你怎么看,我有一个控制器..和两个函数,1 个在 GET 中,1 个在 POST...
我看到你也是服务器端控制器
public FillFormPresentaUnAmicoResponse GetPromozioni(string customerType)
{
...
}
[HttpPost]
public PresentaUnAmicoResponse InvitaAmico(PresentaUnAmicoRequest request)
{
...
}
class PresentaUnAmicoRequest 是
public class PresentaUnAmicoRequest
{
public string CustomerType { get; set; }
}
GET 函数运行正常!但是 POST 不是... 在 post 中,我收到了 "request" 的有效实例,但其中的 属性 是 NULL...
对我来说真正奇怪的是,如果我这样调用Post方法:
var invitation = new MyService.my_controller(undefined);
invitation.$save();
服务器端,"request" 是实例化的..我期望 "request = null" 而不是..
谁能帮帮我? 谢谢
更新:
如果我理解,我需要始终使用相同的对象来坚持 REST 原则。因此,根据 spike 的示例,我相信我必须创建一个类似于此的对象:
public class Promos
{
public string CustomerType{ get; set; }
public List<string> PromoPerCustomerType{ get; set; }
}
public class PresentaAmico
{
public Promos Promozioni { get; set; }
public string Name{ get; set; }
public string Surname { get; set; }
...
}
而我的休息服务应该是这样的
[HttpGet]
public PresentaAmico Get(string customerType)
{
...
}
[HttpPost]
public void Save(PresentaAmico myForm)
{
...
}
是否正确?
恕我直言,这不是 $resouce 最佳工作方式,那是因为您没有真正遵守 REST 原则。 $resource 的想法是获取一个对象,修改它然后再次 $save 它,它映射到 GET 和 POST 调用,其中返回和正在发送的对象是相同的。
您正在获取 FillFormPresentaUnAmicoResponse 并POST获取另一种类型的对象,即 PresentaUnAmicoResponse。
这当然可以开始整个讨论您是否正在使用 REST,因为它可以与 WebAPI 一起使用:即资源,您可以通过在其上映射 HTTP 动词来修改它(GET/POST 等)您的控制器并没有真正遵守这些规则,因为您通过网络发送不同类型的对象。
所以我实际上会推荐 2 个控制器,每个类型一个:FillFormPresentaUnAmicoResponseController 和 PresentaUnAmicoResponseController。在这种情况下,我还会重新考虑命名 - 'response' 后缀没有必要。
var presenta = $resource('/presentaunamicoresponse/:id', { id:'@id'});
// The id doesn't make any sense here - which should raise the question on
// whether these stuff is really suitable for REST or whether you are really
// doing a remote procedure call, but OK.
presenta.CustomerType = 'Whatever';
presenta.$save();
我想这就是它的工作方式。为了保持一致性,您必须将其粘贴在工厂中。但是正如您在文档 ( https://docs.angularjs.org/api/ngResource/service/$resource ) 中看到的那样 - 您可以获得资源,并在资源本身上操作属性。然后调用 $save() 方法。