Je suis complètement nouveau dans la pile ASP.NET MVC et j'aimerais savoir ce qui se passe avec le simple objet Page et l'objet Request ServerVariables ?
Fondamentalement, je souhaite extraire l'adresse IP du PC client, mais je ne comprends pas comment la structure MVC actuelle change cela.
Pour autant que je sache, la plupart des objets variables ont été remplacés par des variantes HttpRequest.
Quelqu’un est-il prêt à partager certaines ressources ? Il y a vraiment une tonne de choses à apprendre dans le monde ASP.NET MVC. :)
Par exemple, j'ai une classe statique avec une fonction actuelle. Comment puis-je obtenir les mêmes résultats en utilisant ASP.NET MVC ?
public static int getCountry(Page page) { return getCountryFromIP(getIPAddress(page)); } public static string getIPAddress(Page page) { string szRemoteAddr = page.Request.ServerVariables["REMOTE_ADDR"]; string szXForwardedFor = page.Request.ServerVariables["X_FORWARDED_FOR"]; string szIP = ""; if (szXForwardedFor == null) { szIP = szRemoteAddr; } else { szIP = szXForwardedFor; if (szIP.IndexOf(",") > 0) { string [] arIPs = szIP.Split(','); foreach (string item in arIPs) { if (!isPrivateIP(item)) { return item; } } } } return szIP; }
Comment appeler cette fonction depuis la page du contrôleur ?
Request.ServerVariables["REMOTE_ADDR"]
Devrait fonctionner - directement dans la vue ou dans le corps de la méthode d'action du contrôleur (Request est une propriété de la classe Controller dans MVC, pas Page). p>Cela fonctionne... mais vous devez publier sur un IIS réel et non sur un IIS virtuel.
La réponse simple est d'utiliser la propriétéHttpRequest.UserHostAddress.
Exemple :Depuis l'intérieur d'un contrôleur :
Exemple :De la classe d'assistance :
Cependant,si la requête a été envoyée par un ou plusieursserveurs proxy传递> alors la propriété d'adresse IP renvoyée parHttpRequest.UserHostAddresssera l'adresse IP du dernier serveur proxy qui a relayé la requête.
LesLes serveurs proxypeuventutiliser la normede factoen plaçant l'adresse IP du client dans l'en-tête HTTPX-Forwarded-For. En plus de ne garantir que la requête comporte un en-tête X-Forwarded-For, il n'y a également aucune garantie que X-Forwarded-For n'a pas étéusurpé.
Réponse originale
Le code ci-dessus fournit l'adresse IP du client sans avoir à rechercher la collection. La propriété Request est disponible dans le contrôleur (ou la vue). Ainsi, au lieu de passer la classe Page à votre fonction vous pouvez passer un objet Request pour obtenir le même résultat :