我正在尝试检查电子邮件是不是已存在于数据库中或不在数据库中,但我的代码会引发错误
Posted
技术标签:
【中文标题】我正在尝试检查电子邮件是不是已存在于数据库中或不在数据库中,但我的代码会引发错误【英文标题】:I am trying to check that If email already exist in databse or not or not in database but my code throws error我正在尝试检查电子邮件是否已存在于数据库中或不在数据库中,但我的代码会引发错误 【发布时间】:2021-11-19 11:04:44 【问题描述】:这是我在控制台中遇到的错误;
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("");
;
我在另一个函数中传递整个函数,在该函数中我传递电子邮件参数以尝试创建一个新用户以及所有其他参数及其值;
$('.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 <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(
方法?
@JeroenvanLangen 是的,但我不知道为什么我在运行它时总是收到错误,而且我对这一切都很陌生,所以这一切对我来说真的很困惑
EmailAlreadyExist
vs EmailALreadyExist
- 它们不一样。所以你正在调用一个不存在的路由。
【参考方案1】:
我可以看到路线中有一个错字。 EmailALreadyExist 中的 L 大写。但是你用小写字母来称呼它。
另外,我发现 Ajax 代码中缺少分号,也请检查一下。
【讨论】:
在CheckAvailability()
行上,对吧? (缺少“;”)
是的。很抱歉忽略了这一点。我并没有真正检查你的代码很远,只是跟踪你的错误,直到我遇到第一个问题,然后停止。一旦解决,所有后续问题都会出现。【参考方案2】:
-
您的代码使用了不能有正文的 GET 方法。所以它必须附加一个 URL 参数。在 ASP.NET 中,它应该被命名。但是您的方法没有命名参数。所以找不到。将参数名称添加到您的有效负载(名称“电子邮件”)。到您的 JSON - 将您的 JS 函数中的
CheckAvailability
data: JSON.stringify(email),
替换为 data: JSON.stringify(email: email),
。然后 jQuery 应该调用匹配 public bool EmailAlreadyExist(string email)
的 api/Employee/EmailALreadyExist?email=....
。
最好使用 POST 方法将电子邮件隐藏在请求正文中。然后你的原始代码可能会有一个 C# 较小的更新:
public bool EmailAlreadyExist([FromBody]string email)
。它将单个参数从正文映射到 C# email
变量。
需要将逻辑与控制器分开。 “瘦控制器”可以验证参数,服务将包含您的“业务逻辑”。
【讨论】:
"EmailALreadyExist" => 实际上我会修正路线中的错字。【参考方案3】:来自您的网址
http://localhost:1089/api/Employee/EmailAlreadyExist?%22some@abc.com%22
您似乎没有正确传递电子邮件参数。
你可以这样传递
http://localhost:1089/api/Employee/EmailAlreadyExist?email=some@abc.com
或稍微改变你的路线以支持你的网址
[Route("api/Employee/EmailAlreadyExist/email")]
【讨论】:
以上是关于我正在尝试检查电子邮件是不是已存在于数据库中或不在数据库中,但我的代码会引发错误的主要内容,如果未能解决你的问题,请参考以下文章