Ссылка на объект не установлена ​​на экземпляр объекта, null - PullRequest
0 голосов
/ 17 октября 2011

Я получаю это сообщение об ошибке: Ссылка на объект не установлена ​​на экземпляр объекта.

  private static void GetIPInfo(User user)
  {
      string ipAddress = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();

      string city = string.Empty;
      string region = string.Empty;
      string country = string.Empty;
      double? latitude = -1.00;
      double? longitude = -1.00;

      LocationTools.GetLocationFromIP(ipAddress, out city, out region, out country, out latitude, out longitude);

      user.IPAddress = user.IPAddress; **//error is pointing here**
  }

Нужно ли мне что-то создавать?

Было бы что-то вроде этого, чтобы решить проблему?

 user.IPAddress new user.IPAddress = user.ipAddress;

Ответы [ 5 ]

2 голосов
/ 17 октября 2011

Чего именно вы ожидали достичь этим утверждением:

user.IPAddress = user.IPAddress;

Я бы ожидал, что это будет в лучшем случае без операции. Похоже, что значение переменной user равно нулю.

Непонятно, для чего предназначен метод, но, вероятно, если user равно нулю, то запрос не аутентифицирован. Странно, что метод GetXyz имеет тип возврата void. Например, PopulateIPInfo? В этой ситуации кажется, что было бы ошибкой передавать пустую ссылку - но вам действительно нужно решить, для чего предназначен метод ... Маловероятно, что создание нового User экземпляра внутри этого метода будет полезен в долгосрочной перспективе.

1 голос
/ 17 октября 2011

Как указал Джон, ваш user кажется нулевым.Я думаю, что проблема в вызывающем методе, а не в GetIPInfo.Возможно, вы захотите добавить некоторую проверку аргументов в ваши методы.Кроме того, я думаю, что этот метод выглядит странно, но у меня может просто не быть надлежащего контекста, чтобы понять, почему он выглядит так.

1 голос
/ 17 октября 2011

Зависит от того, как вы звоните GetIPInfo (пользователь) .Похоже, что вы проходите null как user .Возможно, вам следует написать что-то вроде

GetIPInfo(new User());

Но не ясно, нужно ли инициализировать пользователя каким-либо образом, или этого достаточно для создания пустого экземпляра.Кроме того, я не понимаю, что вы пытаетесь сделать с user.IPAddress = user.IPAddress; Это инструкция, которая, похоже, не оказывает никакого влияния, если только в коде нет другого кода.сеттер IPAddress, который вызывает некоторый побочный эффект, но этого я бы избегал.

РЕДАКТИРОВАТЬ после вашего комментария:

Если я правильно понял (но я не совсем уверен), возможноэто больше похоже на то, что вам действительно нужно:

private static User GetIPInfo () {User user = new User ();

  string ipAddress = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();

  string city = string.Empty;
  string region = string.Empty;
  string country = string.Empty;
  double? latitude = -1.00;
  double? longitude = -1.00;

  LocationTools.GetLocationFromIP(ipAddress, out city, out region, out country, out latitude, out longitude);

  user.IPAddress = ipAddress; 
  // other code to fill the other fields of User

  return user;
}

Затем вы можете вызвать его и получить новый экземплярпользователя, который вы можете присвоить переменной или использовать по своему усмотрению.

1 голос
/ 17 октября 2011

Как насчет:

user = new User; // Or whatever user is supposed to be

user.IPAddress = ipAddress; // Now you can assign an ip address to this property
0 голосов
/ 25 октября 2011

System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] выдает System.NullReferenceException - “Object reference not set to an instance of an object.” - ошибку, если IP-адрес не указан в запросе. Таким образом, вы должны проверить, вызывает ли оператор исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...