Chcę uzyskać bieżącą nazwę domeny w asp.net C #.
Używam tego kodu.
string DomainName = HttpContext.Current.Request.Url.Host;
Mój adres URL jest, localhost:5858
ale tylko zwraca localhost
.
Teraz używam mojego projektu w localhost. Chcę uzyskać localhost: 5858.
Na przykład, gdy używam tej domeny
www.somedomainname.com
Chcę dostać somedomainname.com
Proszę dać mi pomysł, jak uzyskać obecną nazwę domeny.
Odpowiedzi:
Używanie
Request.Url.Host
jest właściwe - w ten sposób uzyskujesz wartośćHost:
nagłówka HTTP , który określa, jakiej nazwy hosta (nazwy domeny) chce UA (przeglądarka), ponieważ część ścieżki zasobu żądania HTTP nie zawiera nazwy hosta.Zauważ, że
localhost:5858
nie jest to nazwa domeny, to specyfikator punktu końcowego, zwany także „autorytetem”, który zawiera nazwę hosta i numer portu TCP. Jest to pobierane przez dostępRequest.Uri.Authority
.Ponadto, nie jest ważne, aby uzyskać
somedomain.com
odwww.somedomain.com
ponieważ serwer WWW może być skonfigurowany tak, aby służyć innym miejscu nawww.somedomain.com
porównaniusomedomain.com
, jednak jeśli jesteś pewien, że to jest ważne w przypadku, wtedy będziesz musiał ręcznie analizowania hosta, choć przy użyciuString.Split('.')
prace w szczypta.Należy zauważyć, że konfiguracja serwera internetowego (IIS) różni się od konfiguracji ASP.NET i że ASP.NET w rzeczywistości całkowicie nie zna konfiguracji powiązań HTTP witryn internetowych i aplikacji internetowych, na których działa. Fakt, że zarówno IIS, jak i ASP.NET mają te same pliki konfiguracyjne (
web.config
), to problem.źródło
Spróbuj uzyskać „lewą część” adresu URL, na przykład:
string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
To daje albo
http://localhost:5858
albohttps://www.somedomainname.com
czy jesteś na lokalnym lub produkcji. Jeśli chcesz usunąćwww
część, skonfiguruj usługi IIS, aby to zrobić, ale to inny temat.Zwróć uwagę, że wynikowy adres URL nie będzie miał końcowego ukośnika.
źródło
http://localhost:60333
Oto zrzut ekranu
Request.RequestUri
i wszystkie jego właściwości w celach informacyjnych.źródło
Możesz wypróbować następujący kod:
Request.Url.Host + (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port)
źródło
www.somedomain.com
to domena / host. Subdomena jest ważną częścią.www.
jest często używany zamiennie z brakiem, ale to musi być ustawione jako zasada (nawet jeśli jest ustawione domyślnie), ponieważ nie są równoważne. Pomyśl o innej subdomenie, na przykładmx.
. To prawdopodobnie ma inny cel niżwww.
.Biorąc to pod uwagę, radziłbym nie robić tego rodzaju rzeczy. To powiedziawszy, ponieważ pytasz, wyobrażam sobie, że masz dobry powód.
Osobiście sugerowałbym
www.
do tego specjalną obudowę .string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);; if (host.StartsWith("www.")) return host.Substring(4); else return host;
W przeciwnym razie, jeśli jesteś naprawdę w 100% pewien, że chcesz odciąć jakąkolwiek subdomenę, będziesz potrzebować czegoś nieco bardziej skomplikowanego.
string host = ...; int lastDot = host.LastIndexOf('.'); int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.'); if (secondToLastDot > -1) return host.Substring(secondToLastDot + 1); else return host;
Dostanie się do portu jest takie, jak mówili inni.
źródło
HttpContext.Current.Request.Url.Host zwraca prawidłowe wartości. Jeśli uruchomisz go na www.somedomainname.com, otrzymasz www.somedomainname.com. Jeśli chcesz również uzyskać 5858, musisz użyć
źródło
Request.ServerVariables
obiekt pracuje dla mnie. Nie znam żadnego powodu, żeby go nie używać.ServerVariables["SERVER_NAME"]
iServerVariables["HTTP_URL"]
powinieneś dostać to, czego szukaszźródło
Możesz wypróbować następujący kod, aby uzyskać w pełni kwalifikowaną nazwę domeny:
źródło
Oto szybki i łatwy sposób uzyskania nazwy adresu URL.
var urlHost = HttpContext.Current.Request.Url.Host; var xUrlHost = urlHost.Split('.'); foreach(var thing in xUrlHost) { if(thing != "www" && thing != "com") { urlHost = thing; } }
źródło
Spróbuj tego:
@ Request.Url.GetLeftPart (UriPartial.Authority)
źródło
Aby uzyskać podstawowy adres URL w MVC nawet z subdomeną
www.somedomain.com/subdomain
:var url = $"{Request.Url.GetLeftPart(UriPartial.Authority)}{Url.Content("~/")}";
źródło
Używam go w ten sposób w asp.net core 3.1
var url =Request.Scheme+"://"+ Request.Host.Value;
źródło