Zastanawiam się, jaki najlepszy sposób uzyskania bieżącej domeny jest w ASP.NET?
Na przykład:
http://www.domainname.com/subdir/ powinno dać http://www.domainname.com http://www.sub.domainname.com/subdir/ powinno dać http://sub.domainname.com
Jako przewodnik powinienem móc dodać adres URL, taki jak „/Folder/Content/filename.html” (powiedzmy, jak wygenerowany przez Url.RouteUrl () w ASP.NET MVC) bezpośrednio do adresu URL i powinno działać.
asp.net
asp.net-mvc
domain-name
Matt Mitchell
źródło
źródło
Odpowiedzi:
Taka sama odpowiedź jak MattMitchell, ale z pewnymi modyfikacjami. Zamiast tego sprawdza domyślny port.
źródło
Request.Url.Authority
zgodnie z sugestią Korayem zamiastRequest.Url.Host
iRequest.Url.Port
.Zgodnie z tym linkiem dobrym punktem wyjścia jest:
Jeśli jednak domena to http://www.domainname.com:500, to się nie powiedzie.
Coś podobnego do następującego jest kuszące, aby rozwiązać ten problem:
Jednak porty 80 i 443 będą zależeć od konfiguracji.
W związku z tym powinieneś użyć tego,
IsDefaultPort
co w zaakceptowanej odpowiedzi powyżej Carlosa Muñoza.źródło
Jest to schemat uwzględniony.
źródło
OSTRZEŻENIE! Do każdego, kto korzysta z Current.Request .Url.Host. Zrozum, że pracujesz w oparciu o CURRENT REQUEST i że bieżące żądanie nie ZAWSZE będzie przychodzić z twoim serwerem, a czasami może być z innymi serwerami.
Więc jeśli użyjesz tego w czymś takim jak Application_BeginRequest () w Global.asax, to w 99,9% przypadków będzie dobrze, ale w 0,1% możesz otrzymać coś innego niż nazwa hosta twojego własnego serwera.
Dobrym tego przykładem jest coś, co odkryłem niedawno. Mój serwer od czasu do czasu trafia na http://proxyjudge1.proxyfire.net/fastenv . Application_BeginRequest () z przyjemnością obsługuje to żądanie, więc jeśli wywołasz Request.Url.Host podczas wysyłania tego żądania, otrzymasz z powrotem proxyjudge1.proxyfire.net. Niektórzy z was mogą pomyśleć „no duh”, ale warto zwrócić na to uwagę, ponieważ był to bardzo trudny do zauważenia błąd, ponieważ zdarzał się tylko w 0,1% przypadków: P
Ten błąd zmusił mnie do wstawienia mojego hosta domeny jako ciągu w plikach konfiguracyjnych.
źródło
Dlaczego nie użyć
Request.Url.Authority
Zwraca całą domenę ORAZ port.
Nadal musisz określić http lub https
źródło
Prosty i krótki sposób (obsługuje schemat, domenę i port):
Posługiwać się
Request.GetFullDomain()
źródło
Inny sposób:
źródło
Co powiesz na:
źródło
Korzystanie z UriBuilder:
źródło
Co powiesz na:
źródło