Wie kann ich den Stammdomänen-URI in ASP.NET abrufen?


95

Angenommen, ich hoste eine Website unter http://www.foobar.com .

Gibt es eine Möglichkeit, programmgesteuert " http://www.foobar.com/ " in meinem Code dahinter zu ermitteln (dh ohne es in meiner Webkonfiguration fest codieren zu müssen)?


7
Da dies von der Anforderung abhängt, können Sie versuchen, in das RequestObjekt zu schauen .
John Saunders

Antworten:


79

Mit HttpContext.Current.Request.Url können Sie alle Informationen zur URL abrufen . Und kann die URL in ihre Fragmente zerlegen.


4
Ja, warum die Abwahl? Sehen Sie nicht, dass etwas als Antwort markiert und oft herabgestimmt ist. : /
Zack

4
Diese Antwort gefällt mir auch nicht. blesh hat das richtige gegeben und dies hätte als Antwort markiert werden sollen ...
Michal B.

-1 - Request.Url gibt häufig eine URL wie "/ folder1 / folder2" an und schließt die Domain insgesamt aus.
Justin

4
@ Justin: Request.Url gibt dir ein Uri-Objekt, in dem alle Teile für dich zerlegt sind. Es sollte dir keine Schnur geben. Zumindest nicht in der Version von .net, die ich benutze
JoshBerke

6
Diese Antwort könnte verbessert werden, indem der Code hinzugefügt wird, der es funktioniert, wie die Antwort unten, die mehr Stimmen hat ...
theJerm

170
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Uri :: GetLeftPart Methode :

Die GetLeftPart-Methode gibt eine Zeichenfolge zurück, die den am weitesten links stehenden Teil der URI-Zeichenfolge enthält und mit dem durch part angegebenen Teil endet.

UriPartial Enumeration :

Die Schema- und Berechtigungssegmente der URI.


5
Viel besser als das Parsen von URL!
Evgenyt

1
Das ist die beste Antwort! tnx!
AminM

Dies sollte die ausgewählte Antwort sein. Zu viele nicht benötigte String-Manipulationen.
Ghasan

1
Mit dieser Methode gibt http: // www.lala.xxx/blah/blah http: // www.lala.xxx
live-love

+1 Und nicht dasselbe wie .Authority, die - in den Tests, die ich mit localhost durchgeführt habe - den Protokollteil (http: //) weglässt.
GGleGrand

122

Für alle, die sich noch fragen, finden Sie eine vollständigere Antwort unter 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
Hat perfekt funktioniert. Wenn die Site Server ist: 8080 / MySiteName , wird sie korrekt abgerufen .
Michael La Voie

2
Vielen Dank, dass Sie den tatsächlichen Code anstelle eines Links an einer anderen Stelle freigegeben haben.
theJerm

2
context.Request.Url.Port == 80 wird Probleme in HTTPS verursachen
Evgenyt

7
Beachtung! Funktioniert nicht für https. Für https ersetzen müssen context.Request.Url.Port == 80 durch (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")oder Verwendung Antwort unten
razon

1
Funktioniert auch für localhost (wenn Sie localy testen). Wenn Sie keinen Port benötigen, können Sie "http: //" + HttpContext.Current.Request.Url.Host verwenden.
CyberHawk

32

Wenn Beispiel-URL http://www.foobar.com/Page1 ist

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
Nein Nein. .Hostvon "http://www.foobar.com/Page1"ist www.foobar.comnicht foobar.com.
Tchelidze

1
Ja, Sie haben Recht, aktualisiert die Antwort. @ Tchelidze danke
Dheeraj Palagiri

27
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"

16

So erhalten Sie die gesamte Anforderungs-URL-Zeichenfolge:

HttpContext.Current.Request.Url

So erhalten Sie den Teil www.foo.com der Anfrage:

HttpContext.Current.Request.Url.Host

Beachten Sie, dass Sie bis zu einem gewissen Grad Faktoren außerhalb Ihrer ASP.NET-Anwendung ausgeliefert sind. Wenn IIS so konfiguriert ist, dass mehrere oder beliebige Host-Header für Ihre Anwendung akzeptiert werden, wird möglicherweise jede der Domänen, die über DNS in Ihre Anwendung aufgelöst wurden, als Anforderungs-URL angezeigt, je nachdem, welche vom Benutzer eingegeben wurde.


1
einfachste Lösung hier
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 => host.com zurückgeben
s.host.com => host.com zurückgeben

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


Mir ist klar, dass dies ein alter Beitrag ist, aber gut gemacht, NQuenault. Ich bin bei Regex Expressions nicht so gut gemacht. Genau das, was ich brauchte.
JeffreyJ

@nquenault irgendwelche Gedanken darüber, wie man mit einem Hostnamen wie www.abc.com am besten umgeht? Vielen Dank!
Gary Ewan Park

4

- Das Hinzufügen des Ports kann beim Ausführen von IIS Express hilfreich sein

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port


3

Ich weiß, dass dies älter ist, aber der richtige Weg, dies jetzt zu tun, ist

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

Dadurch wird die DNS- oder IP-Adresse mit Port für einen Server abgerufen.



1

C # Beispiel unten:

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

Dies gibt genau das zurück, was Sie fragen.

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

Ich weiß, dass dies eine ältere Frage ist. Aber ich brauchte die gleiche einfache Antwort und diese gibt genau das zurück, was gefragt wird (ohne http: //).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.