Muszę mieć dostęp do pełnego adresu URL strony, na której się znajduję, z poziomu kontrolki użytkownika. Czy jest to tylko kwestia połączenia razem kilku zmiennych żądania? Jeśli tak, które? A może jest prostszy sposób?
Muszę mieć dostęp do pełnego adresu URL strony, na której się znajduję, z poziomu kontrolki użytkownika. Czy jest to tylko kwestia połączenia razem kilku zmiennych żądania? Jeśli tak, które? A może jest prostszy sposób?
Odpowiedzi:
Zwykle używam, Request.Url.ToString()
aby uzyskać pełny adres URL (w tym querystring), nie jest wymagana żadna konkatenacja.
Request.Url.ToString()
nie zawiera queryString.
Oto lista, do której zwykle odwołuję się w przypadku tego typu informacji:
Request.ApplicationPath : /virtual_dir
Request.CurrentExecutionFilePath : /virtual_dir/webapp/page.aspx
Request.FilePath : /virtual_dir/webapp/page.aspx
Request.Path : /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath : d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString : /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath : /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri : http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host : localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery : /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port : 80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme : http
Request.Url.Segments : /
virtual_dir/
webapp/
page.aspx
Mamy nadzieję, że okaże się to przydatne!
Request.QueryString
q=qvalue
tylko zwraca
Request.Url.AbsoluteUri
Ta właściwość robi wszystko, czego potrzebujesz, wszystko w jednym zwięzłym połączeniu.
Dla ASP.NET Core
trzeba przeliterować:
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
Możesz też dodać do swojego widoku instrukcję using:
@using Microsoft.AspNetCore.Http.Extensions
następnie
@Context.Request.GetDisplayUrl()
To _ViewImports.cshtml
może być lepsze miejsce do tego@using
Request.RawUrl
jeśli potrzebujesz pełnego adresu URL jako wszystkiego, od http po kwerendę, będziesz musiał połączyć następujące zmienne
Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME")
Request.ServerVariables("SCRIPT_NAME")
Request.ServerVariables("QUERY_STRING")
Lepiej używać Request.Url.OriginalString
niż Request.Url.ToString()
(według MSDN )
OriginalString
.
Dzięki chłopaki, użyłem kombinacji obu twoich odpowiedzi @Christian i @Jonathan dla mojej konkretnej potrzeby.
"http://" + Request.ServerVariables["SERVER_NAME"] + Request.RawUrl.ToString()
Nie muszę się martwić o bezpieczny http, potrzebuję zmiennej servername, a RawUrl obsługuje ścieżkę z nazwy domeny i zawiera kwerendę, jeśli jest obecna.
Wypróbuj następujące rozwiązania -
var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();