2011-10-17 4 views
0

Je continue d'obtenir ce message d'erreur: La référence d'objet n'est pas définie sur une instance d'un objet.Référence d'objet non définie sur une instance d'un objet, null

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** 
    } 

Ai-je besoin d'instancier quelque chose?

Serait-ce quelque chose comme ceci pour résoudre le problème?

user.IPAddress new user.IPAddress = user.ipAddress; 
+0

Tout d'abord, vous vous attribuez quelque chose qui n'est rien. –

Répondre

1

Cela dépend de la façon dont vous appelez GetIPInfo (Utilisateur utilisateur). Il semble que vous êtes null null comme utilisateur. Peut-être que vous devriez écrire quelque chose comme

GetIPInfo(new User()); 

Mais on ne sait pas si l'utilisateur doit être initialisé d'une certaine façon, ou il suffit de créer une instance vide. En outre, je ne comprends pas ce que vous essayez de faire avec user.IPAddress = user.IPAddress; C'est une instruction qui ne semble pas avoir d'effet du tout, à moins qu'il y ait un autre code dans le setter de IPAddress qui provoque un effet collatéral, mais c'est quelque chose que j'éviterais.

EDIT après votre commentaire:

Si je me trompe pas (mais je ne suis pas vraiment sûr), cela est peut-être plus semblable à ce que vous avez vraiment besoin:

private static utilisateur GetIPInfo() { Utilisateur utilisateur = nouvel utilisateur();

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; 
} 

Ensuite, vous pouvez appeler et obtenir une nouvelle instance de l'utilisateur que vous pouvez assigner à une variable ou utiliser comme vous le souhaitez.

+0

GetIPInfo (user0); Im en utilisant cela plus en haut, im essayant d'ajouter l'IPAddres pour cet utilisateur qui aime la page facebook qui est ensuite ajouté à la base de données, au moment de ses valeurs nulles. C'était en ajoutant l'information d'utilisateur avant que j'aie essayé d'ajouter ipAddress etc. aux colonnes dans cette table. – MJCoder

+0

GetIPInfo (nouvelUtilisateur); c'est ce que je devrais avoir mis à, alors maintenant il capture l'adresse IP quand je débogue dans mon code, erreur d'écolier, une deuxième paire d'yeux est utile. Merci les gars :) – MJCoder

1

Que diriez-vous:

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

user.IPAddress = ipAddress; // Now you can assign an ip address to this property 
+0

Je ne sais pas pourquoi j'ai eu un -1 pour essayer d'aider ... –

2

Qu'est-ce exactement que vous attendez cette déclaration à atteindre:

user.IPAddress = user.IPAddress; 

Je me attends que ce soit au mieux un no-op. Comme il arrive, il semble que la valeur de la variable user est nulle.

La méthode n'est pas claire, mais si user est nul, alors la requête n'est pas authentifiée. Il est étrange qu'une méthode GetXyz ait un type de retour void. Est-ce que ce devrait être PopulateIPInfo par exemple? Dans cette situation, il semble que ce serait un bogue d'être une référence nulle - mais vous devez vraiment décider ce que la méthode est destinée à faire ... Il est peu probable que créer une nouvelle instance dans cette méthode User être utile à long terme.

1

Comme Jon l'a fait remarquer, votre user semble être nul. Je pense que le problème est dans la méthode d'appel, pas dans GetIPInfo. Vous pouvez ajouter un argument de vérification à vos méthodes. En outre, je pense que cette méthode semble étrange, mais je pourrais ne pas avoir le contexte approprié pour comprendre pourquoi il semble que c'est le cas.

0

System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] throws System.NullReferenceException - “Object reference not set to an instance of an object.” -error si l'adresse IP n'est pas fournie dans la requête. Vous devriez donc vérifier si l'instruction déclenche une exception.

+0

"si l'adresse IP n'est pas fournie dans la demande"? Pourriez-vous expliquer celui-là? –

Questions connexes