我正在尝试检查电子邮件是否已存在于数据库中或不存在于数据库中但我的代码抛出错误

I am trying to check that If email already exist in databse or not or not in database but my code throws error

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

获取 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 &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);
    }

非常感谢我得到的所有帮助,并热烈欢迎改进此代码的建议

谢谢

来自你的url

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

您似乎没有正确传递电子邮件参数。

你可以这样传

http://localhost:1089/api/Employee/EmailAlreadyExist?email=some@abc.com

或者稍微改变你的路线以支持你的url

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

我看到路线有错别字。 EmailALreadyExist 中的 L 大写。但是你用小写字母调用它。

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

  1. 您的代码使用了不能有正文的 GET 方法。所以它必须附加一个 URL 参数。在 ASP.NET 中,它应该被命名。但是你的方法没有命名参数。所以没有找到。将参数名称添加到您的有效负载(名称“电子邮件”)。到您的 JSON - 将您的 JS 函数 CheckAvailability data: 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. 有必要将您的逻辑与控制器分开。 “瘦控制器”可以验证参数,服务将包含您的“业务逻辑”。