2015-06-20 10 views
24

मैं angularjs HTTP पोस्ट सेवा का उपयोग कर एकाधिक पैरामीटर भेजना चाहता हूं।एकाधिक पैरा के साथ angularjs में POST कैसे भेजें?

यहाँ क्लाइंट साइड कोड है:

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

लेकिन जब मैं पोस्ट कर रहा त्रुटि मिलती है। कोई विचार क्या मैं गलत कर रहा हूँ?

+0

मुझे लगता है कि आपको पास करना है Irray: कॉन्फ़िगर पैराम में सत्य –

+0

कृपया इसे देखें [यह लिंक देखें] (http://stackoverflow.com/questions/28829124/post-multiple-objects-from-angular-controller-to -web-api-2) जो मुझे मेरी इसी तरह की समस्या को हल करने में मदद करता है –

उत्तर

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

आपको जो कुछ भी कर रहे हैं उसका स्पष्टीकरण जोड़ना चाहिए, भले ही यह बहुत सरल हो। –

+2

हाँ, मैं बस इस पर आया और यह दूसरों के लिए उपयोगी प्रतीत हो सकता है। मुझे इस बात का कोई संकेत नहीं है कि इसके साथ क्या करना है। -1 –

+0

हाँ यह काम किया, इस तरह, यह अंतर बनाता है। हालांकि $ http.post (url, data) – Ram

1

आप केवल पोस्ट के माध्यम से शरीर में पैरामीटर के रूप में 1 ऑब्जेक्ट भेज सकते हैं। मैं

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

करने के लिए अपने पोस्ट विधि बदल जाएगा और अपने कोणीय कोड में आप JSON अंकन में एक उत्पाद सरणी ऊपर से होकर गुजरेगा

+2

वास्तव में angularjs $ http में एकाधिक पैरा भेजने का कोई तरीका नहीं है? – Michael

+0

दुर्भाग्यवश शरीर में नहीं है लेकिन आप यूआरएल में स्ट्रिंग या न्यूमेरिकल डेटा पास कर सकते हैं लेकिन यह सुनिश्चित नहीं है कि उत्पाद आपके लिए एक विकल्प है या नहीं, यदि उत्पाद एक जटिल वस्तु है। संपादित करें: बस ध्यान दें, यह कोणीय के लिए विशिष्ट सीमा नहीं है, यह HTTP – Arrakis

+0

है क्या आपको कोई विचार है कि मैं POST budy में सरल प्रकार (स्ट्रिंग, int आदि ...) भेज सकता हूं? – Michael

31

क्लाइंट साइड

डाटा एक वस्तु सरणी में बांटा जा करने की जरूरत है पेलोड के रूप में - 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"); 
}); 

सर्वर साइड

एक डाटा ट्रांसफर वस्तु बनाएँ (डीटीओ) जैसे वर्ग:

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

वर्ग नीचे एक ही संपत्ति नामों के साथ डीटीओ को स्वीकार करता है जो पेलोड ले जा रहा है।

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

ऊपर कक्षा में, request यहाँ product2

1

product के मूल्यों के साथ 2 गुण और शामिल प्रत्यक्ष समाधान है:

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

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

आप समझदार हैं, तो आप यह करते हैं

और फिर प्रोड भेजें शरीर में उतार (एक बल्ला की तरह)। {} और इसे जोड़ने के भीतर

+0

ग्रेट उत्तर में encapsulated एकाधिक पैरामीटर मिलता है! मैं ऐसा करने के लिए एक अन्य डीटीओ वर्ग बनाना नहीं चाहता हूं। – gsubiran

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

उपरोक्त कोड का उपयोग करके, हम एंगुलर जेएस –

0

तुम भी भेज सकते हैं (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 (बिल्ला श्रेणी), और badge तीन मापदंडों हैं।

1

यदि आप एएसपी.नेट एमवीसी और वेब एपीआई संभावनाओं का उपयोग कर रहे हैं तो आपके पास न्यूटॉन्सॉफ्ट है।

एपीआई नियंत्रक::

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> 
4

यह निर्भर करता है Json NuGet पैकेज installed.This पुस्तकालय एक वर्ग है जो आप एक से अधिक पैरामीटर के माध्यम से पारित करने की अनुमति देता JObject कहा जाता है आपकी बैकएंड तकनीक क्या है। यदि आपकी बैकएंड तकनीक जेएसओएन डेटा स्वीकार कर रही है। डेटा: {आईडी: 1, नाम: 'नाम', ...}

अन्यथा, आपको लगता है कि बनाने फैक्टरी आईडी = 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() {}); 

रेफरी: How do I POST urlencoded form data with $http in AngularJS?

महत्वपूर्ण encodeURIComponent के बारे में (obj [पी]) वस्तु जिस तरह से निहित स्थानांतरित करेंगे। एक तिथि मान की तरह एक स्ट्रिंग में परिवर्तित किया जाएगा जैसे => 'शुक्र फरवरी 03 2017 09:56:57 जीएमटी -00000 (यूएस माउंटेन स्टैंडर्ड टाइम)' जिसमें मेरे पास कोई सुराग नहीं है कि आप इसे कम से कम पीछे कैसे पार्स कर सकते हैं सी # कोड भेजें। (मेरा मतलब है कि कोड को 2-लाइन से अधिक की आवश्यकता नहीं है) आप अपने बैक-एंड कोड के लिए इसे अधिक सार्थक प्रारूप में बदलने के लिए डेट केस में (angular.isDate, value.toJSON) का उपयोग कर सकते हैं।

मैं अपने बैकएंड webservices को comunicating को यह समारोह का उपयोग कर रहा ...

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

और bellow कोड इसका इस्तेमाल करने के ...

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

में बैकएंड सी # मैं newtonsoft उपयोग कर रहा हूँ डेटा deserializing के लिए।

+0

पोस्ट अपडेट में एकाधिक पैरा के साथ पोस्ट भेज सकते हैं। कृपया दूसरे भाग की जांच करें –

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

तुम भी {} भीतर (POST) कई पैरामीटर भेजने के लिए और जोड़ सकते हैं।

संबंधित मुद्दे