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


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.


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.


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;
    }
}

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"

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"

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


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


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


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.



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();

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;                                
}

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.