我试图检查,如果电子邮件已经存在于数据库或不或不在数据库中,但我的代码抛出错误



这是我在控制台得到的错误;

GET http://localhost:1089/api/Employee/EmailAlreadyExist?%22some@abc.com%22 404(未找到)

这是我的ajax代码,我正在发送用户电子邮件,同时创建一个新用户,我想要这个方法让我知道如果电子邮件已经存在于数据库或不;

function CheckAvailability() {
var email = $("#officialemail").val();
$.ajax({
type: "GET",
url: 'http://localhost:1089/api/Employee/EmailAlreadyExist',
dataType: 'json',
contentType: "application/json",
data: JSON.stringify(email),
success: function (response) {
var message = $("#message");
if (response) {
//Email available.
message.css("color", "green");
message.html("Email is available");
}
else {
//Email not available.
message.css("color", "red");
message.html("Email is NOT available");
}
}
});
}
function ClearMessage() {
$("#message").html("");
};

,我将整个函数传递到另一个函数中,在这个函数中,我传递了email参数,试图创建一个新用户以及所有其他参数及其值;

$('.empOfficialDetails').click(function (ev) {
ev.preventDefault();
CheckAvailability()
var data = new Object();
data.UserName = $('#username').val();
data.UPassword = $('#userpass').val();
data.OfficialEmailAddress = $('#officialemail').val();
data.Departments = $('#departments :selected').text();
data.Designation = $('#designation :selected').text();
data.RoleID = $('#role').val();
data.Role = $('#role :selected').text();
data.ReportToID = $('#reportToID').val();
data.ReportTo = $('#reportTo :selected').text();
data.JoiningDate = $('#joindate').val();
data.IsAdmin = $('#isAdmin :selected').val() ? 1 : 0;
data.IsActive = $('#isActive :selected').val() ? 1 : 0;
data.IsPermanent = $('#isPermanent :selected').val() ? 1 : 0;
data.DateofPermanancy = $('#permanantdate').val();
data.HiredbyReference = $('#hiredbyRef :selected').val() ? 1 : 0;
data.HiredbyReferenceName = $('#refePersonName').val();
data.BasicSalary = $('#basicSalary').val();
data.CurrentPicURL = $('.picture').val();
if (data.UserName && data.UPassword && data.OfficialEmailAddress && data.Departments && data.Designation && data.Role && data.IsAdmin && data.IsPermanent) {
$.ajax({
url: 'http://localhost:1089/api/Employee/EmpOfficialDetails',
type: "POST",
dataType: 'json',
contentType: "application/json",
data: JSON.stringify(data),
beforeSend: function () {
$("#dvRoomsLoader").show();
},
complete: function () {
$("#dvRoomsLoader").hide();
},
success: function (data) {
var ID = parseInt(data);
if (ID > 0) {
//var id = data;
$(".HiddenID").val(data);
//var id = $(".HiddenID").val();
$('#official').css('display', 'block');
$('#official').html("Employees Official details added successfully...!");
$('#official').fadeOut(25000);
$("#dvRoomsLoader").show();
$('.empOfficialDetails').html("Update &nbsp; <i class='fa fa-angle-right rotate-icon'></i>");
}
else {
$('#official').find("alert alert-success").addClass("alert alert-danger").remove("alert alert-success");
}
},
error: function (ex) {
alert("There was an error while submitting employee data");
alert('Error' + ex.responseXML);
alert('Error' + ex.responseText);
alert('Error' + ex.responseJSON);
alert('Error' + ex.readyState);
alert('Error' + ex.statusText);
}
});

}
return false;
});

和在我的控制器我使用内联查询检查类似的电子邮件在我的数据库;

[Route("api/Employee/EmailALreadyExist")]
[HttpGet]
public bool EmailAlreadyExist(string email)
{
string retval;
var con = DB.getDatabaseConnection();
Employee emp = new Employee();
string query = "IF EXISTS (SELECT 1 FROM Employee WHERE OfficialEmailAddress = @OfficialEmailAddress)";
SqlCommand com = new SqlCommand(query, con);
com.Parameters.AddWithValue("@OfficialEmailAddress", email);
email = emp.OfficialEmailAddress;
SqlDataReader rdr = com.ExecuteReader();
if (rdr.HasRows)
{
retval = "true";
}
else
{
retval = "false";
}
return Convert.ToBoolean(retval);
}

我得到的所有帮助都是高度赞赏的,并且热烈欢迎所有使这段代码更好的建议

谢谢

我可以看到路由中有一个错字。EmailALreadyExist中的L大写。但是你用的是小写字母。

另外,我发现Ajax代码中缺少分号,请检查一下。

  1. 你的代码使用了一个不能有body的GET方法。所以它需要给它附加一个URL参数。在ASP。它应该被命名为。NET。但是你的方法没有命名参数。所以它没有被发现。将参数名称添加到有效负载(name "email")。到你的JSON -替换在你的JS函数CheckAvailabilitydata: JSON.stringify(email),data: JSON.stringify({email: email}),。然后jQuery应该调用api/Employee/EmailALreadyExist?email=....来匹配public bool EmailAlreadyExist(string email)
  2. 最好使用POST方法将邮件隐藏在请求正文中。然后你的原始代码可以有一个c#较小的更新:public bool EmailAlreadyExist([FromBody]string email)。它将单个参数从主体映射到c#email变量。
  3. 有一点要将逻辑与控制器分开。"薄controller"可以验证参数,服务将包含您的"业务逻辑"。

From your url

http://localhost:1089/api/Employee/EmailAlreadyExist?%22some@abc.com%22

看起来你没有正确地传递email参数

你可以像

这样传递它http://localhost:1089/api/Employee/EmailAlreadyExist?email=some@abc.com

或者稍微改变你的路由来支持你的url

[Route("api/Employee/EmailAlreadyExist/{email}")]

最新更新