Czy w .NET istnieje prosty sposób szybkiego uzyskania bieżącego protokołu, hosta i portu? Na przykład, jeśli mam następujący adres URL:
http://www.mywebsite.com:80/pages/page1.aspx
Muszę zwrócić:
http://www.mywebsite.com:80
Wiem, że mogę użyć, Request.Url.AbsoluteUri
aby uzyskać pełny adres URL, i wiem, że mogę użyć, Request.Url.Authority
aby uzyskać hosta i port, ale nie jestem pewien, jak najlepiej uzyskać protokół bez analizowania ciągu adresu URL.
Jakieś sugestie?
Odpowiedzi:
Poniższy kod (C #) powinien załatwić sprawę
źródło
Uri.GetLeftPart
jak wskazuje @dthrasherChociaż @Rick ma zaakceptowaną odpowiedź na to pytanie, istnieje w rzeczywistości krótszy sposób, aby to zrobić, używając źle nazwanej
Uri.GetLeftPart()
metody.Jest jednak jeden haczyk
GetLeftPart()
. Jeśli port jest domyślnym portem dla schematu, usunie go. Ponieważ port 80 jest domyślnym portem dla protokołu http,GetLeftPart()
w powyższym przykładzie będzie to wynik wyjściowyhttp://www.mywebsite.com
.Gdyby numer portu był inny niż 80, zostałby uwzględniony w wyniku.
źródło
Uri
klasy w ten sposób. Istnieje wiele przypadków, w których ten konstruktor zgłosi wyjątek. W większości przypadków wolę, aby mój kod był trochę bardziej wyrozumiały przed przerwaniem bieżącego zadania.Cóż, jeśli robisz to w Asp.Net lub masz dostęp do HttpContext.Current.Request Powiedziałbym, że są to łatwiejsze i bardziej ogólne sposoby ich uzyskania:
Mam nadzieję, że to pomoże. :)
źródło
Bardziej uporządkowanym sposobem uzyskania tego jest użycie UriBuilder. Pozwala to uniknąć bezpośredniej manipulacji ciągiem.
źródło
Request.Url zwróci Ci Uri żądania. Gdy już to zrobisz, możesz odzyskać prawie wszystko, co chcesz. Aby uzyskać protokół, zadzwoń do schematu właściwość .
Próba:
Mam nadzieję że to pomoże.
źródło
Jeszcze krótszy sposób może wymagać nowszej ASP.Net:
Wyliczanie UriComponents pozwala określić, które składniki URI mają zostać uwzględnione.
źródło
Bardzo podobny do odpowiedzi Holgera. Jeśli chcesz pobrać adres URL, możesz zrobić coś takiego:
Klasa Uri zapewnia całą gamę metod, których wiele nie mam na liście.
W moim przypadku, musiałem chwycić
LocalHost
wraz zPort Number
, więc to, co zrobiłem:Które pomyślnie złapał:
http://localhost:12345
źródło