Jak uzyskać identyfikator URI domeny głównej w programie ASP.NET?


Odpowiedzi:


81

HttpContext.Current.Request.Url może uzyskać wszystkie informacje dotyczące adresu URL. I może rozbić adres URL na jego fragmenty.


4
Tak, dlaczego głosowanie przeciw? Nie wyświetlaj czegoś oznaczonego jako odpowiedź - i - często odrzucanego. : /
Zack

4
Ta odpowiedź też mi się nie podoba. blesh podał właściwą i to powinno być oznaczone jako odpowiedź ...
Michal B.

-1 - Request.Url często podaje adres URL, taki jak „/ folder1 / folder2”, i całkowicie wyklucza domenę.
Justin

4
@Justin: Request.Url daje ci obiekt Uri, w którym wszystkie części są podzielone. Nie powinien dawać ci sznurka. Przynajmniej nie w wersji .net, której używam
JoshBerke

6
Tę odpowiedź można poprawić, dodając kod, który sprawi, że będzie działać jak odpowiedź poniżej, która ma więcej głosów w górę ...
theJerm

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

Metoda Uri :: GetLeftPart :

Metoda GetLeftPart zwraca ciąg zawierający skrajną lewą część ciągu identyfikatora URI, kończący się częścią określoną przez część.

UriPartial Enumeration :

Schemat i segmenty uprawnień identyfikatora URI.


5
Znacznie lepiej niż parsowanie adresu URL!
Evgenyt,

1
to najlepsza odpowiedź! tnx!
AminM

To powinna być wybrana odpowiedź. Zbyt wiele operacji na strunach, które są niepotrzebne.
Ghasan

1
Korzystając z tej metody, http: // www.lala.xxx/blah/blah zwróci http: // www.lala.xxx
live-love

+1 I to nie to samo co .Authority, które - w testach przeprowadzonych na localhost - pomija część protokołu (http: //).
GGleGrand

122

Dla każdego, kto wciąż się zastanawia, pełniejsza odpowiedź jest dostępna pod adresem 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
Działał doskonale. Jeśli witryna to server: 8080 / MySiteName , pobiera ją poprawnie.
Michael La Voie

2
Dziękujemy za udostępnienie aktualnego kodu zamiast linku w innym miejscu.
Jerm,

2
context.Request.Url.Port == 80 spowoduje problemy w ramach protokołu HTTPS
Evgenyt,

7
Uwaga! Nie działa dla https. W przypadku https należy zamienić context.Request.Url.Port == 80 na (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")lub użyć odpowiedzi poniżej
razon

1
Działa również dla localhost (jeśli testujesz lokalnie). Jeśli nie potrzebujesz portu, możesz użyć „http: //” + HttpContext.Current.Request.Url.Host;
CyberHawk

34

Jeśli przykładowy adres URL to 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
Nie nie. .Hosto "http://www.foobar.com/Page1"to www.foobar.com, nie foobar.com.
tchelidze

1
tak, masz rację, zaktualizowałem odpowiedź. @tchelidze thanks
Dheeraj Palagiri

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

16

Aby uzyskać cały ciąg adresu URL żądania:

HttpContext.Current.Request.Url

Aby uzyskać część dotyczącą www.foo.com żądania:

HttpContext.Current.Request.Url.Host

Zauważ, że do pewnego stopnia jesteś zdany na łaskę czynników spoza aplikacji ASP.NET. Jeśli usługi IIS są skonfigurowane tak, aby akceptować wiele lub dowolny nagłówek hosta dla aplikacji, każda z tych domen, które zostały rozpoznane przez Twoją aplikację za pośrednictwem DNS, może zostać wyświetlona jako adres URL żądania, w zależności od tego, którą z nich wprowadził użytkownik.


1
najprostsze rozwiązanie tutaj
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 => return host.com
s.host.com => return host.com

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


Zdaję sobie sprawę, że to stary post, ale fajnie zrobiony NQuenault, nie jestem świetny w Regex Expressions, tak dobrze zrobiony. Dokładnie to, czego potrzebowałem.
JeffreyJ

@nquenault masz jakieś przemyślenia na temat tego, jak najlepiej obsługiwać nazwę hosta, taką jak www.abc.com? Dzięki!
Gary Ewan Park

4

- Dodanie portu może pomóc podczas uruchamiania usług IIS Express

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


3

Wiem, że to jest starsze, ale teraz należy to zrobić

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

W ten sposób uzyskasz adres DNS lub IP z portem dla serwera.



1

Przykład C # poniżej:

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

To zwróci konkretnie to, o co prosisz.

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

Wiem, że to starsze pytanie. Ale potrzebowałem tej samej prostej odpowiedzi, a ta zwraca dokładnie to, o co pytano (bez http: //).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.