Comment puis-je obtenir l'URI du domaine racine dans ASP.NET?

96

Disons que j'héberge un site Web à http://www.foobar.com .

Existe-t-il un moyen de vérifier par programme " http://www.foobar.com/ " dans mon code derrière (c'est-à-dire sans avoir à le coder en dur dans ma configuration Web)?

coeur
la source
7
Puisque cela dépend de la demande, vous pouvez essayer de chercher dans l' Requestobjet.
John Saunders

Réponses:

79

HttpContext.Current.Request.Url peut vous obtenir toutes les informations sur l'URL. Et peut décomposer l'URL en ses fragments.

JoshBerke
la source
4
Oui, pourquoi voter contre? Ne voyez pas quelque chose marqué comme réponse - et - souvent voté contre. : /
Zack
4
Je n'aime pas non plus cette réponse. blesh a donné le bon et cela aurait dû être marqué comme la réponse ...
Michal B.
-1 - Request.Url donne souvent une URL telle que "/ dossier1 / dossier2" et exclut complètement le domaine.
Justin
4
@Justin: Request.Url vous donne un objet Uri dont toutes les pièces sont décomposées pour vous. Cela ne devrait pas vous donner une corde.
Du
6
Cette réponse pourrait être améliorée en ajoutant le code qui le fait fonctionner comme la réponse ci-dessous qui a plus de votes ...
theJerm
171
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Méthode Uri :: GetLeftPart :

La méthode GetLeftPart renvoie une chaîne contenant la partie la plus à gauche de la chaîne URI, se terminant par la partie spécifiée par part.

Énumération UriPartial :

Les segments de schéma et d'autorité de l'URI.

George
la source
5
Bien mieux que l'analyse de l'URL!
Evgenyt
1
c'est la meilleure réponse! tnx!
AminM
Cela devrait être la réponse choisie. Trop de manipulations de chaînes inutiles.
Ghasan
1
En utilisant cette méthode, http: // www.lala.xxx/blah/blah retournera http: // www.lala.xxx
live-love
+1 Et pas la même chose que .Authority qui - dans les tests que j'ai effectués sur localhost - laisse de côté la partie protocole (http: //).
GGleGrand
122

Pour ceux qui se demandent encore, une réponse plus complète est disponible sur http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/ .

public string FullyQualifiedApplicationPath
{
    get
    {
        //Return variable declaration
        var appPath = string.Empty;

        //Getting the current context of HTTP request
        var context = HttpContext.Current;

        //Checking the current context content
        if (context != null)
        {
            //Formatting the fully qualified website url/name
            appPath = string.Format("{0}://{1}{2}{3}",
                                    context.Request.Url.Scheme,
                                    context.Request.Url.Host,
                                    context.Request.Url.Port == 80
                                        ? string.Empty
                                        : ":" + context.Request.Url.Port,
                                    context.Request.ApplicationPath);
        }

        if (!appPath.EndsWith("/"))
            appPath += "/";

        return appPath;
    }
}
Brian Hasden
la source
4
A parfaitement fonctionné. Si le site est serveur: 8080 / MySiteName , il l'obtient correctement.
Michael La Voie
2
Merci d'avoir partagé du code réel au lieu d'un lien ailleurs.
theJerm
2
context.Request.Url.Port == 80 causera des problèmes dans HTTPS
Evgenyt
7
Attention! Ne fonctionne pas pour https. Https besoin de remplacer context.Request.Url.Port == 80 par (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")ou utiliser réponse ci - dessous
Razon
1
Fonctionne également pour localhost (si vous testez localement). Si vous n'avez pas besoin de port, vous pouvez utiliser "http: //" + HttpContext.Current.Request.Url.Host;
CyberHawk
32

Si l'exemple d'URL est http://www.foobar.com/Page1

HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"


HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"


HttpContext.Current.Request.Url.Scheme; //returns "http/https"


HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"
Dheeraj Palagiri
la source
1
Non Non. .Hostde "http://www.foobar.com/Page1"est www.foobar.com, non foobar.com.
tchelidze
1
oui vous avez raison, a mis à jour la réponse. @tchelidze merci
Dheeraj Palagiri
27
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"
Ben Lesh
la source
16

Pour obtenir la chaîne complète de l'URL de la requête:

HttpContext.Current.Request.Url

Pour obtenir la partie www.foo.com de la demande:

HttpContext.Current.Request.Url.Host

Notez que vous êtes, dans une certaine mesure, à la merci de facteurs extérieurs à votre application ASP.NET. Si IIS est configuré pour accepter plusieurs ou n'importe quel en-tête d'hôte pour votre application, alors l'un de ces domaines qui ont résolu votre application via DNS peut apparaître comme l'URL de la demande, en fonction de celui que l'utilisateur a entré.

Rex M
la source
1
solution la plus simple ici
full_prog_full
4
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

host.com => renvoyer host.com
s.host.com => renvoyer host.com

host.co.uk => retour host.co.uk
www.host.co.uk => retour host.co.uk
s1.www.host.co.uk => retour host.co.uk

NQuenault
la source
Je me rends compte que c'est un vieux post, mais bien fait NQuenault, je ne suis pas génial avec Regex Expressions si bien fait. Exactement ce dont j'avais besoin.
JeffreyJ
@nquenault des réflexions sur la meilleure façon de gérer un nom d'hôte comme www.abc.com? Merci!
Gary Ewan Park
4

- L'ajout du port peut aider lors de l'exécution d'IIS Express

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port
JonathanC
la source
3
string domainName = Request.Url.Host
Sk93
la source
3

Je sais que c'est plus ancien, mais la bonne façon de le faire maintenant est

string Domain = HttpContext.Current.Request.Url.Authority

Cela obtiendra l'adresse DNS ou IP avec le port d'un serveur.

les mains libres23
la source
3

Cela fonctionne aussi:

string url = HttpContext.Request.Url.Authority;

Fribu - Solutions intelligentes
la source
1

Exemple C # ci-dessous:

string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
  scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();
Saul Dolgin
la source
1
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
  cookieDomain = domainReg.Match(host).Groups[1].Value;                                
}
Shawn Constance
la source
1

Cela retournera spécifiquement ce que vous demandez.

Dim mySiteUrl = Request.Url.Host.ToString()

Je sais que c'est une question plus ancienne. Mais j'avais besoin de la même réponse simple et cela renvoie exactement ce qui est demandé (sans le http: //).

Tomepenn
la source