Quel est le moyen d'obtenir l'adresse IP du client dans ASP.NET MVC ?
P粉232409069
P粉232409069 2023-10-14 09:01:56
0
2
477

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 ?

P粉232409069
P粉232409069

répondre à tous (2)
P粉826283529

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.

    P粉903969231

    La réponse simple est d'utiliser la propriétéHttpRequest.UserHostAddress.

    Exemple :Depuis l'intérieur d'un contrôleur :

    using System; using System.Web.Mvc; namespace Mvc.Controllers { public class HomeController : ClientController { public ActionResult Index() { string ip = Request.UserHostAddress; ... } } }

    Exemple :De la classe d'assistance :

    using System.Web; namespace Mvc.Helpers { public static class HelperClass { public static string GetIPHelper() { string ip = HttpContext.Current.Request.UserHostAddress; .. } } }

    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.

    Les

    Les 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

    Request.UserHostAddress

    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 :

    public static string getIPAddress(HttpRequestBase request) { string szRemoteAddr = request.UserHostAddress; string szXForwardedFor = 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; }
      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!