recherche

Maison  >  Questions et réponses  >  le corps du texte

Quel est le moyen d'obtenir l'adresse IP du client dans ASP.NET MVC ?

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粉232409069P粉232409069405 Il y a quelques jours688

répondre à tous(2)je répondrai

  • P粉826283529

    P粉8262835292023-10-15 00:43:26

    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).

    Cela fonctionne... mais vous devez publier sur un IIS réel et non sur un IIS virtuel.

    répondre
    0
  • P粉903969231

    P粉9039692312023-10-15 00:08:01

    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 plusieurs serveurs proxy alors la propriété d'adresse IP renvoyée par HttpRequest.UserHostAddress sera l'adresse IP du dernier serveur proxy qui a relayé la requête.

    Les

    Les serveurs proxy peuvent utiliser la norme de facto en plaçant l'adresse IP du client dans l'en-tête HTTP X-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;
    }

    répondre
    0
  • Annulerrépondre