Я пытаюсь проверить, существует ли электронная почта в базе данных или нет, или ее нет в базе данных, но мой код выдает ошибку

#c# #asp.net #asp.net-mvc #api #asp.net-web-api

Вопрос:

Это ошибка, которую я получаю в своей консоли;

ПОЛУЧИТЬ http://localhost:1089/api/Employee/EmailAlreadyExist?»some@abc.com» 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 amp;amp; data.UPassword amp;amp; data.OfficialEmailAddress amp;amp; data.Departments amp;amp; data.Designation amp;amp; data.Role amp;amp; data.IsAdmin amp;amp; 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 amp;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);
    }
 

вся помощь, которую я получаю, высоко ценится, и все предложения по улучшению этого кода горячо приветствуются

Спасибо

Комментарии:

1. Вы проверяли свой EmailAlreadyExist( метод напрямую?

2. @JeroenvanLangen Да, но я не знаю, почему я получаю ошибку все время, когда запускаю ее, и я новичок во всем этом, так что все это действительно сбивает меня с толку

3. EmailAlreadyExist против EmailALreadyExist — они не одно и то же. Таким образом, вы вызываете маршрут, которого не существует.

Ответ №1:

Я вижу, что в маршруте есть опечатка. Буква L в EmailALreadyExist пишется с заглавной буквы. Но вы называете это строчной буквой.

Кроме того, я вижу отсутствующую точку с запятой в коде Ajax, проверьте это тоже.

Комментарии:

1. На CheckAvailability() линии, то есть, верно? (Отсутствует «;»)

2. Да, вот так. Извините, что опустил это. Я на самом деле не очень тщательно проверял ваш код, просто следил за вашей ошибкой, пока не наткнулся на первую проблему, а затем остановился. Все последующие проблемы появятся, как только это будет решено.

Ответ №2:

  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. Есть смысл отделить вашу логику от контроллера. «Тонкий контроллер» может проверять параметры, служба будет содержать вашу «бизнес-логику».

Комментарии:

1. «EmailALreadyExist» => Я бы на самом деле исправил опечатку в маршруте.

Ответ №3:

С вашего URL-адреса

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

похоже, вы неправильно передаете параметр электронной почты.

Вы можете передать это так

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

или немного измените свой маршрут, чтобы поддержать свой URL

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