web-dev-qa-db-fra.com

Comment obtenir le nom de domaine actuel dans ASP.NET

Je veux obtenir le nom de domaine actuel en asp.net c #.

J'utilise ce code.

string DomainName = HttpContext.Current.Request.Url.Host;

Mon URL est localhost:5858 mais elle ne renvoie que localhost.

Maintenant, j'utilise mon projet dans localhost. Je veux obtenir localhost: 5858.

Pour un autre exemple, lorsque j'utilise ce domaine

www.somedomainname.com

Je veux obtenir somedomainname.com

Donnez-moi s'il vous plaît une idée de la façon d'obtenir le nom de domaine actuel.

61
Jatin Gadhiya

Utiliser Request.Url.Host est approprié - c’est la façon dont vous récupérez la valeur de l’en-tête HTTP Host:, qui spécifie le nom d’hôte (nom de domaine) que l’UA (navigateur) souhaite, en tant que partie du chemin de ressource de la requête HTTP. n'inclut pas le nom d'hôte.

Notez que localhost:5858 n'est pas un nom de domaine, mais un spécificateur de noeud final, également appelé "autorité", qui comprend le nom d'hôte et le numéro de port TCP. Ceci est récupéré en accédant à Request.Uri.Authority.

De plus, il n’est pas valide d’obtenir somedomain.com de www.somedomain.com car un serveur Web pourrait être configuré pour desservir un site différent pour www.somedomain.com par rapport à somedomain.com, cependant, si vous êtes sûr que cela est valide dans votre cas, alors vous aurez besoin d'analyser manuellement le nom d'hôte, bien que l'utilisation de String.Split('.') fonctionne de manière pincée.

Notez que la configuration du serveur Web (IIS) est distincte de la configuration d'ASP.NET et qu'ASP.NET ignore en fait la configuration de la liaison HTTP des sites Web et des applications Web sous lesquels il s'exécute. Le fait que IIS et ASP.NET partagent les mêmes fichiers de configuration (web.config) est un gouffre.

56
Dai

Essayez d’obtenir la “partie gauche” de l’URL, comme ceci:

string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);

Cela vous donnera soit http://localhost:5858 ou https://www.somedomainname.com si vous êtes en local ou en production. Si vous voulez supprimer la partie www, vous devez configurer IIS pour le faire, mais c'est un autre sujet.

Notez que l'URL résultante ne comportera pas de barre oblique.

70

Voici une capture d'écran de Request.RequestUri et de toutes ses propriétés pour la référence de tous.

enter image description here

39
ThiagoPXP

Vous pouvez essayer le code suivant:

 Request.Url.Host +
    (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port)
16
Rajeev Mehta

www.somedomain.comest le domaine/hôte. Le sous-domaine est une partie importante. www. est souvent utilisé de manière interchangeable pour ne pas en avoir un, mais cela doit être défini comme une règle (même s'il est défini par défaut) car ils ne sont pas équivalents. Pensez à un autre sous-domaine, comme mx.. Cela a probablement une cible différente de www..

Cela dit, je conseillerais de ne pas faire ce genre de chose. Cela dit, puisque vous demandez, je suppose que vous avez une bonne raison.

Personnellement, je suggérerais un boîtier spécial www. pour cela.

string Host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);;

if (Host.StartsWith("www."))
    return Host.Substring(4);
else
    return Host;

Sinon, si vous êtes vraiment sûr à 100% que vous voulez couper n'importe lequel sous-domaine, vous aurez besoin de quelque chose d'un peu plus compliqué.

string Host = ...;

int lastDot = Host.LastIndexOf('.');

int secondToLastDot = Host.Substring(0, lastDot).LastIndexOf('.');

if (secondToLastDot > -1)
    return Host.Substring(secondToLastDot + 1);
else
    return Host;

Obtenir le port est juste comme d'autres personnes l'ont dit.

6
Matthew Haugen

l'objet Request.ServerVariables fonctionne pour moi. Je ne connais aucune raison de ne pas l'utiliser.

ServerVariables["SERVER_NAME"] et ServerVariables["HTTP_URL"] devrait obtenir ce que vous cherchez

2
PJ Leirer

Voici un moyen simple et rapide d’obtenir le nom de l’URL.

            var urlHost = HttpContext.Current.Request.Url.Host;

            var xUrlHost = urlHost.Split('.');
            foreach(var thing in xUrlHost)
            {
                if(thing != "www" && thing != "com")
                {
                    urlHost = thing;
                }
            }
1
dstineback

Vous pouvez essayer le code suivant pour obtenir un nom de domaine complet:

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host
1
Yogesh Patel

HttpContext.Current.Request.Url.Host renvoie les valeurs correctes. Si vous l'exécutez sur www.somedomainname.com, vous obtiendrez www.somedomainname.com. Si vous voulez obtenir le 5858 aussi, vous devez utiliser

HttpContext.Current.Request.Url.Port 
1
artm

Essaye ça:

@ Request.Url.GetLeftPart (UriPartial.Authority)

0
Hiren Patel