Как можно динамически вставить IP-адрес пользователя в базу данных после входа в систему с помощью идентификатора (внешний ключ)? - PullRequest
0 голосов
/ 16 октября 2019

У меня есть хранимые процедуры для входа пользователя, которые я вызываю в своем коде хранилища данных. И теперь я хочу, чтобы при входе в систему IP-адрес и время системы пользователя сохранялись в таблице с помощью идентификатора, который является ссылкой из другой таблицы (внешний ключ). Мне нужно сохранить IP-адрес в формате 192.167.1.78.

Это моя хранимая процедура сохранения IP-адреса и даты и времени с помощью идентификатора пользователя:

ALTER procedure [dbo].[Sp_LoginIpAddress]    
(
@LoginDate datetime,
@IpAddress varchar(50)
)
as
begin

DECLARE @EmpId INT
select EmpId from EmpRegister

if not exists(select * from LoginDetails where EmpId=@EmpId)
begin

insert into LoginDetails( LoginDate , IpAddress)
values ( @LoginDate , @IpAddress)

set @EmpId = SCOPE_IDENTITY()

select cast(@EmpId as int)  
end
else
begin
select cast(0 as int)
end
end

У меня есть4 столбца в моей таблице [LoginDetails]. Это LoginId, EmpId, LoginDate, IpAddress.

Здесь EmpId - это ограничение внешнего ключа.

Вот мой код контроллера:

  public ActionResult GetIP()
        {
            GetIPAddress();
            return View();
        }

        [HttpPost]
        public ActionResult SaveIpAddress(LoginDetail log)
        {


            ActionResult response = null;

            try
            {
                int intResult = 0;

                log.LoginDate = DateTime.Now;
                string IP = GetIPAddress().ToString();
                log.IpAddress = IP;
                intResult = _registrationrepository.SaveIpAddress(log);

                if (intResult >= 1) //inserted successfully
                {

                    response = Json(new { result = "Success" });
                }
                else if (intResult == -1)
                {

                    response = Json(new { result = "Exists", url = Url.Action("Emp", "VerifyOTP") });
                }
                else if (intResult == 0) //Duplicate record rule violation
                {

                    response = Json(new { result = "InsertFail" }, JsonRequestBehavior.AllowGet);
                }
                else //On Error
                {
                    response = Json(new { result = "Error" }, JsonRequestBehavior.AllowGet);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
            return response;

        }



        private string GetIPAddress()
        {

            string strHostName = "";
            strHostName = System.Net.Dns.GetHostName();

            IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);

            string ipaddress = Convert.ToString(ipEntry.AddressList[2]);
            ViewBag.IPAddress = ipaddress;
            return ipaddress.ToString();


        }

Вот мой DataRepository и IDataRepository:

DataRepository:

 public int SaveIpAddress(LoginDetail log)
        {
            int finalResult = 0;

            try
            {
                ObjectResult<int?> CRId = objEntities.Sp_LoginIPAddress(
                                                                      log.LoginId,
                                                                      log.LoginDate,
                                                                      log.IpAddress                                                                                                                                       
                                                                       );
                var result = CRId.FirstOrDefault<int?>();

                if (result.HasValue)
                {

                    if (result > 0)
                    {
                        //on Success
                        finalResult = result.Value;
                    }

                }
                else
                {
                    // on failure 
                    finalResult = 0;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return finalResult;

        } 

IDataRepository:

    public interface IRegistrationRepository 
    {
      int SaveIpAddress(LoginDetail log);
    }

Итак, я ожидаю, что выходные данные будут такими, как когда пользователь вошел в IpAddress и DateTime должны быть сохранены втаблицы LoginDetail непосредственно через бэкэнд-функциональность.

...