Chcę napisać małą metodę pomocniczą, która zwraca podstawowy adres URL witryny. Oto co wymyśliłem:
public static string GetSiteUrl()
{
string url = string.Empty;
HttpRequest request = HttpContext.Current.Request;
if (request.IsSecureConnection)
url = "https://";
else
url = "http://";
url += request["HTTP_HOST"] + "/";
return url;
}
Czy jest w tym jakiś błąd, o którym możesz pomyśleć? Czy ktoś może to poprawić?
c#
asp.net
uri
httprequest
Jaggu
źródło
źródło
Odpowiedzi:
Spróbuj tego:
źródło
Otóż to ;)
źródło
Niestety, popularne
GetLeftPart
rozwiązanie nie jest obsługiwane w wersji PCLUri
.GetComponents
jest jednak, więc jeśli potrzebujesz przenośności, powinno to załatwić sprawę:źródło
Uważam, że powyższe odpowiedzi nie biorą pod uwagę, gdy witryna nie znajduje się w katalogu głównym witryny.
To jest dla kontrolera WebApi:
źródło
Dla mnie @ warlock wygląda jak do tej pory najlepsza odpowiedź, ale zawsze używałem tego w przeszłości;
Lub w kontrolerze WebAPI;
co jest przydatne, więc możesz wybrać format ucieczki, który chcesz. Nie jestem pewien, dlaczego istnieją dwie tak różne implementacje i, o ile mogę powiedzieć, ta metoda i @ warlock zwracają dokładnie ten sam wynik w tym przypadku, ale wygląda na to,
GetLeftPart()
że działałoby równieżmailto
na przykład dla tagów podobnych do Uri innych niż serwer .źródło
Jest to metoda o wiele bardziej głupia.
źródło
/
jeśli hostujesz w jakiejś domenie aplikacji, np. Twój serwer / nazwa_aplikacji / twoja ścieżka_protaidę z
źródło
Na podstawie tego, co napisał Warlock, stwierdziłem, że wirtualny katalog główny ścieżki jest potrzebny, jeśli nie jesteś hostowany w katalogu głównym swojej sieci. (Działa to dla kontrolerów MVC Web API)
źródło
Używam następującego kodu z Application_Start
String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);
źródło
To działa dla mnie.
Więc jeśli chcesz uzyskać dostęp do swojej nazwy domeny, rozważ podanie nazwy aplikacji w przypadku:
====================================
Dla dev.x.us/web
zwraca ten silny tekst
źródło
Proszę użyć poniższego kodu
źródło
źródło
mógłbyś dodać port dla portu innego niż 80 / SSL?
coś jak:
i wykorzystać to w końcowym wyniku?
źródło
Request.Url.Authority
będzie zawierać numer portu, jeśli jest niestandardowy