Подтвердить что ты не робот

Как отправить POST в angularjs с несколькими параметрами?

Я хочу отправить несколько параметров, используя HTTP-службу angularjs.

Вот код на стороне клиента:

$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") });

Вот код на стороне сервера:

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

Но когда я делаю сообщение, я получаю ошибку. Любая идея, что я делаю неправильно?

4b9b3361

Ответ 1

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

Ответ 2

Клиентская сторона

Данные должны быть сгруппированы в массив объектов как полезная нагрузка - Indata:

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

Передайте полезную нагрузку через $http.post в качестве второго аргумента:

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

Сторона сервера

Создайте класс объекта передачи данных (DTO) как таковой:

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

Следующий класс принимает DTO с теми же именами свойств, которые несет полезная нагрузка.

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

В вышеприведенном классе request содержит 2 свойства со значениями product и product2

Ответ 3

Это зависит от того, какова ваша базовая технология. Если ваша базовая технология принимает данные JSON. данные: {ID: 1, имя: 'имя',...}

в противном случае вам необходимо преобразовать ваши данные в лучший способ сделать это, создав Factory, чтобы преобразовать ваши данные в ID = 1 & имя = имя &...

затем на $http определите тип содержимого. вы можете найти полную статью @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: Как отправить данные с urlencoded формы POST с помощью $http в AngularJS?

важно! about encodeURIComponent (obj [p]) передаст объект как неявный. как значение даты будет преобразовано в строку типа = > 'Fri Feb 03 2017 09:56:57 GMT-0700 (US Mountain Standard Time), которую я не знаю, как вы можете анализировать ее, по крайней мере, в спине -end С#. (Я имею в виду код, который не нуждается в более чем 2-строчной) вы можете использовать (angular.isDate, value.toJSON) в случае даты, чтобы преобразовать его в более значимый формат для вашего внутреннего кода.

Я использую эту функцию для общения с моими бэкэнд-серверами...

 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) }
            });
        }; 

и ниже, чтобы использовать его...

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

in backend С# Я использую newtonsoft для десериализации данных.

Ответ 4

Вы можете отправлять только один объект в качестве параметра в теле через сообщение. Я бы изменил метод Post на

public void Post(ICollection<Product> products)
{
}

и в вашем коде angular вы должны передать массив продуктов в нотации JSON

Ответ 5

Вот прямое решение:

// POST api/<controller>
[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") });
};

Если вы правы, вы это делаете:

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

И затем отправляйте продукты в тело (например, балу).

Ответ 6

Если вы используете возможности ASP.NET MVC и Web API, у вас установлен пакет Newtonsoft.Json NuGet. В этой библиотеке есть класс под названием JObject, который позволяет вам передавать несколько параметров:

Api Controller:

public class ProductController : ApiController
{
    [HttpPost]
    public void Post(Newtonsoft.Json.Linq.JObject data)
    {
        System.Diagnostics.Debugger.Break();

        Product product = data["product"].ToObject<Product>();
        Product product2 = data["product2"].ToObject<Product>();

        int someRandomNumber = data["randomNumber"].ToObject<int>();
        string productName = product.ProductName;
        string product2Name = product2.ProductName;
    }
}

public class Product
{
    public int ProductID { get; set; }
    public string ProductName { get; set; }
}

Вид:

<script src="~/Scripts/angular.js"></script>
<script type="text/javascript">
    var myApp = angular.module("app", []);
    myApp.controller('controller', function ($scope, $http) {

        $scope.AddProducts = function () {
            var product = {
                ProductID: 0,
                ProductName: "Orange",
            }

            var product2 = {
                ProductID: 1,
                ProductName: "Mango",
            }

            var data = {
                product: product,
                product2: product2,
                randomNumber:12345
            };

            $http.post("/api/Product", data).
            success(function (data, status, headers, config) {
            }).
            error(function (data, status, headers, config) {
                alert("An error occurred during the AJAX request");
            });
        }
    });
</script>
<div ng-app="app" ng-controller="controller">
    <input type="button" ng-click="AddProducts()" value="Get Full Name" />
</div>

Ответ 7

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
});

Ответ 8

Вы также можете отправить (POST) несколько параметров в {} и добавить его.

Пример:

$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) {
});

где employeeId, bType (Значок Catagory) и badge - три параметра.

Ответ 9

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

Вы также можете отправить (POST) несколько параметров в {} и добавить его.