将对象从 Angular Post 传递到 .Net ASMX
Passing an Object from Angular Post to .Net ASMX
我一直在尝试将对象作为 Post 参数传递给 .NET asmx Web 服务。我可以传递原始类型,如 int、string 作为参数,但我想传递整个对象,因为我的 class 包含很多属性,单独传递每个 属性 非常耗时。
我的 C# Web 服务代码是:
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public ContactBLL AddContact(ContactBLL Contact)
{
//add contact and return the contact object
}
我在 Web 服务的顶部添加了以下语句 class:
[System.Web.Script.Services.ScriptService]
我在 Web 服务中有第二个函数,当我的页面加载时调用它以获得 json ContactBLL 对象。
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public ContactBLL GetContact(int ContactID)
{
//return contact
}
我在工厂中使用以下函数来调用 asmx 网络方法:
factory.GetContactInfo = function (ContactID) {
return $http.post(serviceBase + 'GetContact', { ContactID: ContactID }).then(function (results) {
return results.data;
});
};
factory.InsertContact = function (Contact) {
return $http.post(serviceBase + 'AddContact', { ContactBLL: Contact }).then(function (results) {
return results.data;
});
};
在我的控制器中,GetContact 函数在页面加载时被调用,它 returns 正确的数据来初始化联系人对象。然后我调用 AddContact 函数并将对象传递给工厂函数。控件未访问 Web 服务,我在 chrome 中看到 500 消息,其中包含以下消息:
消息:"Invalid web service call, missing value for parameter: 'Contact'."
控制器代码如下:
var ContactController = function ($scope, $location, $http, $window, ContactService) {
var Contact;
Initialise();
function Initialise() {
Contact = {};
GetContact(-1);
}
function GetContact(ContactID) {
ContactService.GetContactInfo(ContactID)
.then(function (data) {
//do something
}, function (error) {
$window.alert('Sorry, an error occurred: ' + error.data.message);
});
}
$scope.AddContactRecord = function () {
ContactService.InsertContact(Contact)
.then(function (data) {
//do something
}, function (error) {
$window.alert('Sorry, an error occurred: ' + error.data.message);
});
}
}
如果我做错了什么或通过 Post 调用传递数十个属性的简单方法,请告诉我。 GetContact 调用工作正常,但是,我在 InsertContact 调用时出错。
我找到错误原因了。我在工厂的 AddContact 函数中传递了数据类型 (ContactBLL) 而不是参数的名称 (Contact)。正确代码如下:
factory.InsertContact = function (Contact) {
return $http.post(serviceBase + 'AddContact', { Contact: Contact }).then(function (results) {
return results.data;
});
};
我一直在尝试将对象作为 Post 参数传递给 .NET asmx Web 服务。我可以传递原始类型,如 int、string 作为参数,但我想传递整个对象,因为我的 class 包含很多属性,单独传递每个 属性 非常耗时。
我的 C# Web 服务代码是:
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public ContactBLL AddContact(ContactBLL Contact)
{
//add contact and return the contact object
}
我在 Web 服务的顶部添加了以下语句 class:
[System.Web.Script.Services.ScriptService]
我在 Web 服务中有第二个函数,当我的页面加载时调用它以获得 json ContactBLL 对象。
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public ContactBLL GetContact(int ContactID)
{
//return contact
}
我在工厂中使用以下函数来调用 asmx 网络方法:
factory.GetContactInfo = function (ContactID) {
return $http.post(serviceBase + 'GetContact', { ContactID: ContactID }).then(function (results) {
return results.data;
});
};
factory.InsertContact = function (Contact) {
return $http.post(serviceBase + 'AddContact', { ContactBLL: Contact }).then(function (results) {
return results.data;
});
};
在我的控制器中,GetContact 函数在页面加载时被调用,它 returns 正确的数据来初始化联系人对象。然后我调用 AddContact 函数并将对象传递给工厂函数。控件未访问 Web 服务,我在 chrome 中看到 500 消息,其中包含以下消息: 消息:"Invalid web service call, missing value for parameter: 'Contact'."
控制器代码如下:
var ContactController = function ($scope, $location, $http, $window, ContactService) {
var Contact;
Initialise();
function Initialise() {
Contact = {};
GetContact(-1);
}
function GetContact(ContactID) {
ContactService.GetContactInfo(ContactID)
.then(function (data) {
//do something
}, function (error) {
$window.alert('Sorry, an error occurred: ' + error.data.message);
});
}
$scope.AddContactRecord = function () {
ContactService.InsertContact(Contact)
.then(function (data) {
//do something
}, function (error) {
$window.alert('Sorry, an error occurred: ' + error.data.message);
});
}
}
如果我做错了什么或通过 Post 调用传递数十个属性的简单方法,请告诉我。 GetContact 调用工作正常,但是,我在 InsertContact 调用时出错。
我找到错误原因了。我在工厂的 AddContact 函数中传递了数据类型 (ContactBLL) 而不是参数的名称 (Contact)。正确代码如下:
factory.InsertContact = function (Contact) {
return $http.post(serviceBase + 'AddContact', { Contact: Contact }).then(function (results) {
return results.data;
});
};