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
687

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 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;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal