我正在尝试将关键值对数据从角度应用程序发布到asp.net页面,但是我无法在asp.net页面上收到结果。
示例数据
{fullName: "Vikas Bansal", userId: "1001387693259813", userimageurl: "http://graph.facebook.com/1001387693259813/picture?width=250&height=250"}
角色代码
var postData = {
fullName: $scope.name,
userId: $scope.userId,
userimageurl: $scope.userImage
};
var postUrl = 'http://localhost:41115/Index.aspx';
$http({
url: postUrl,
method: "POST",
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: postData
}).then(function (responce) {
console.log(responce);
}, function (responce) {
console.log(responce);
});
Asp.net网页代码
protected void Page_Load(object sender, EventArgs e)
{
var userId = Request.Form["userId"]; /// getting null
var fullName = Request.Form["fullName"]; /// getting null
var img = Request.Form["userimageurl"]; /// getting null
}
在asp.net页面中,所有变量都为null。
修改
在angularJs post request
中将内容类型更改为'Content-Type': 'application/json; charset=utf-8'
并使用var strJSON = (new StreamReader(Request.InputStream).ReadToEnd());
我可以获得发布的json
但我仍然想知道是否有办法直接获得键值对?
喜欢这个var userId = Request.Form["userId"];
答案 0 :(得分:2)
这是因为您的有效负载实际上是JSON
,但您尝试将其作为FormData
对象传递。
您需要制作一个FormData()
对象。然后
(1)告诉AngularJs不要使用angular.identity
函数对其进行序列化。
(2)Angular的 PUT 和 POST 请求的默认标头为application/json
,因此您也希望覆盖它。浏览器将Content-Type
设置为multipart/form-data
并填写正确的边界。
试试这个:
var postData = new FormData();
postData.append("fullName", $scope.name);
postData.append("userId", $scope.userId);
postData.append("userimageurl", $scope.userImage);
$http.post(postUrl, postData, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
}).then(function(data) {
//success
}, function(error) {
//error
});