【发布时间】:2015-03-30 07:48:21
【问题描述】:
编辑:添加了一些额外的方法使事情更清楚
我正在尝试使用 AngularJS 中的 Ajax 调用从 C# 中的 ASP.NET Web 服务中检索数据。我们的网络方法如下所示:
[WebMethod]
public User getUserByEmail(String Email)
{
return new User().getUserByEmail(Email);
}
您将在下面找到我们确切的 .getUserByEmail(Email) 方法:
public User getUserByEmail(String Email)
{
User u = null;
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["socceronlineConnectionString"].ConnectionString))
{
SqlCommand command = new SqlCommand("SELECT * FROM dbo.tbl_User WHERE Email = 'nick.cornelis@student.vives.be'", connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
while(reader.Read())
{
Debug.WriteLine("UserId: " + reader[0] + " \n ClubId: " + reader[1] + " \n Language: " + reader[4] + " \n Passwordhash: " + reader[11] + " \n FirstName: " + reader[12] + " \n LastName: " + reader[13] + " \n Email: " + reader[14] + " \n");
u = saveUser(reader);
}
}
finally
{
reader.Close();
}
}
return u;
}
在这里,我们将数据保存在域对象中。
Our domain-class is as follows:
private User saveUser(SqlDataReader reader)
{
User u = new User();
if (reader[0] != DBNull.Value)
{
u.UserId = (int)reader[0];
}
if (reader[1] != DBNull.Value)
{
u.ClubId = (int)reader[1];
}
if (reader[4] != DBNull.Value)
{
u.Language = (String)reader[4];
}
if (reader[11] != DBNull.Value)
{
u.Passwordhash = (String)reader[11];
}
if (reader[12] != DBNull.Value)
{
u.FirstName = (String)reader[12];
}
if (reader[13] != DBNull.Value)
{
u.LastName = (String)reader[13];
}
if (reader[14] != DBNull.Value)
{
u.Email = (String)reader[14];
}
return u;
}
}
如您所见,getUserByEmail 方法连接到数据库并检索正确的信息,该部分工作正常。现在我们正试图通过 AngularJS 访问这个数据库。这是我们的 AJAX 调用:
$http({
method: 'POST',
url: "http://localhost:19067/UserList.asmx/getUserByEmail",
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: {Email: 'test.mail@gmail.com'}
}).success(function (data, status, headers, config) {
alert("succes");
}).error(function (data, status, headers, config) {
alert("no succes");
});
当我尝试最后一种方法时,我收到了 500 服务器错误。 当我尝试通过另一种方法通过 GET 接收所有电子邮件地址时,一切正常。 对我的网络服务进行参数化 ajax 调用的正确方法是什么?
【问题讨论】:
-
您的方法
getUserByEmail似乎有异常。你能把断点放在那里并检查它是如何工作的吗? -
@ie。我已经调试了webmethod,可以在webservice中获取我需要的数据
-
那么它看起来像一个序列化问题。您能否使用用户类定义(以及其他 DTO 类,如果有)扩展您的问题
-
我在开篇文章中发布了一些额外的课程。提前致谢!
标签: c# jquery asp.net ajax angularjs