Como enviar o POST em angularjs com múltiplos params?

Eu quero enviar vários parâmetros usando angularjs HTTP post service.

Aqui está o código do lado do cliente:

$http.post("http://localhost:53263/api/Products/", [$scope.product, $scope.product2]). then(function (data, status, headers, config) { alert("success") }, function (data, status, headers, config) { alert("error") }); 

Aqui está o código do lado do servidor:

 // POST api/ public void Post([FromBody]Product product,[FromBody]Product product2) { var productRepository = new ProductRepository(); var newProduct = productRepository.Save(product); } 

Mas quando eu faço o post eu recebo erro. Alguma ideia do que estou fazendo errado?

  var Indata = {param:'val1',.....} $http({ url: "time.php", method: "POST", params: Indata }) 

Lado do Cliente

Os dados precisam ser agrupados em uma matriz de objects como carga útil – Indata :

 var Indata = {'product': $scope.product, 'product2': $scope.product2 }; 

Passe a carga através de $http.post como o segundo argumento:

 $http.post("http://localhost:53263/api/Products/", Indata).then(function (data, status, headers, config) { alert("success"); },function (data, status, headers, config) { alert("error"); }); 

Lado do servidor

Crie uma class do Data Transfer Object (DTO) como tal:

 public class ExampleRequest { public string product {get; set;}; public string product2 {get; set;}; } 

A class abaixo aceita DTO com os mesmos nomes de propriedade que a carga está carregando.

 public void Post(ExampleRequest request) { var productRepository = new ProductRepository(); var newProduct = productRepository.Save(request.product); } 

Na class acima, request contém 2 propriedades com valores de product e product2

Depende de qual é a sua tecnologia de backend. Se sua tecnologia de back-end aceitar dados JSON. data: {id: 1, nome: ‘name’, …}

caso contrário, você precisa converter sua melhor maneira de dados para fazer isso, criando Factory para converter seus dados para id = 1 & name = name & …

depois, em $ http, defina o tipo de conteúdo. você pode encontrar o artigo completo @ https://www.bennadel.com/blog/2615-posting-form-data-with-http-in-angularjs.htm

 $http({ method: 'POST', url: url, headers: {'Content-Type': 'application/x-www-form-urlencoded'}, transformRequest: function(obj) { var str = []; for(var p in obj) str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); return str.join("&"); }, data: {username: $scope.userName, password: $scope.password} }).success(function () {}); 

ref: Como faço para POST codificar os dados do formulário com $ http no AngularJS?

! importante sobre encodeURIComponent (obj [p]) irá transferir o object da maneira implícita. como um valor de data será convertido em uma string como => ‘Sex Fev 03 2017 09:56:57 GMT-0700 (US Mountain Standard Time)’ que eu não tenho idéia de como você pode analisá-lo pelo menos em volta -final código C #. (Eu quero dizer código que não precisa de mais de 2 linhas) você pode usar (angular.isDate, value.toJSON) no caso de data para convertê-lo para o formato mais significativo para o seu código de back-end.

Estou usando essa function para me comunicar com meus serviços web de back-end …

  this.SendUpdateRequest = (url, data) => { return $http({ method: 'POST', url: url, headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, transformRequest: function (obj) { return jsontoqs(obj); }, data: { jsonstring: JSON.stringify(data) } }); }; 

e abaixo o código para usá-lo …

 webrequest.SendUpdateRequest( '/Services/ServeicNameWebService.asmx/Update', $scope.updatedto) .then( (res) => { /*/TODO/*/ }, (err) => { /*/TODO/*/ } ); 

no back-end C # Estou usando o newtonsoft para desserializar os dados.

Você só pode enviar 1 object como um parâmetro no corpo via post. Eu mudaria seu método Post para

 public void Post(ICollection products) { } 

e no seu código angular você passaria uma matriz de produtos na notação JSON

Se você está usando as chances da ASP.NET MVC e da API da Web, você tem o pacote Newtonsoft.Json NuGet instalado. Essa biblioteca tem uma class chamada JObject que permite que você passe por vários parâmetros:

Controlador Api:

 public class ProductController : ApiController { [HttpPost] public void Post(Newtonsoft.Json.Linq.JObject data) { System.Diagnostics.Debugger.Break(); Product product = data["product"].ToObject(); Product product2 = data["product2"].ToObject(); int someRandomNumber = data["randomNumber"].ToObject(); string productName = product.ProductName; string product2Name = product2.ProductName; } } public class Product { public int ProductID { get; set; } public string ProductName { get; set; } } 

Visão:

   
  var headers = {'SourceFrom':'web'}; restUtil.post(url, params, headers).then(function(response){ 

Você também pode enviar (POST) vários parâmetros dentro de {} e adicioná-los.

Aqui está a solução direta:

 // POST api/ [HttpPost, Route("postproducts/{product1}/{product2}")] public void PostProducts([FromUri]Product product, Product product2) { Product productOne = product; Product productTwo = product2; } $scope.url = 'http://localhost:53263/api/Products/' + $scope.product + '/' + $scope.product2 $http.post($scope.url) .success(function(response) { alert("success") }) .error(function() { alert("fail") }); }; 

Se você é são, faça isso:

 var $scope.products.product1 = product1; var $scope.products.product2 = product2; 

E, em seguida, enviar produtos no corpo (como um balla).

Você também pode enviar ( POST ) vários parâmetros dentro de {} e adicioná-los.

Exemplo:

 $http.post(config.url+'/api/assign-badge/', {employeeId:emp_ID,bType:selectedCat,badge:selectedBadge}) .then(function(response) { NotificationService.displayNotification('Info', 'Successfully Assigned!', true); }, function(response) { }); 

em que employeeId , bType (categoria do badge ) e badge são três parâmetros.

 var name = $scope.username; var pwd = $scope.password; var req = { method: 'POST', url: '../Account/LoginAccount', headers: { 'Content-Type': undefined }, params: { username: name, password: pwd } } $http(req).then(function (responce) { // success function }, function (responce) { // Failure Function }); 

adicione o transformRequest como abaixo para enviar vários parâmetros para o backend

 var jq = jQuery.noConflict(); var transform = function(data) { return jq.param(data); }; var config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' },transformRequest: transform }; var params={ blogPostJson:JSON.stringify($scope.blogPost), publish:$scope.blogPost.active }; var url = "${createLink(controller : 'cms', action : 'saveBlog')}"; $http.post(url,params, config).then(function onSuccess(response) { var data = response.data; // var status = response.status; if (data.error) { alert('error :' + data.error); } else { // alert('Success'); } }).catch(function onError(response) { //console.log ("Unable to save Alcohol information"); });