Come posso ottenere l'URL completo della pagina in cui mi trovo in C#
-
09-06-2019 - |
Domanda
Devo essere in grado di ottenere l'URL completo della pagina in cui mi trovo da un controllo utente.È solo questione di concatenare insieme un gruppo di variabili Request?Se sì, quali?O c'è un modo più semplice?
Soluzione
Di solito uso Request.Url.ToString()
per ottenere l'URL completo (inclusa la querystring), non è richiesta alcuna concatenazione.
Altri suggerimenti
Ecco un elenco a cui faccio normalmente riferimento per questo tipo di informazioni:
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
Spero che lo troverai utile!
Request.Url.AbsoluteUri
Questa proprietà fa tutto ciò di cui hai bisogno, tutto in una concisa chiamata.
Richiesta.RawUrl
se hai bisogno dell'URL completo come tutto, dall'http alla querystring, dovrai concatenare le seguenti variabili
Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME")
Request.ServerVariables("SCRIPT_NAME")
Request.ServerVariables("QUERY_STRING")
Per ASP.NET Core
dovrai scriverlo:
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
Oppure puoi aggiungere un'istruzione using alla tua vista:
@using Microsoft.AspNetCore.Http.Extensions
Poi
@Context.Request.GetDisplayUrl()
IL _ViewImports.cshtml
potrebbe essere un posto migliore per quello @using
Meglio usare Request.Url.OriginalString
di Request.Url.ToString()
(secondo MSDN)
Grazie ragazzi, ho utilizzato una combinazione delle vostre risposte @Christian e @Jonathan per la mia esigenza specifica.
"http://" + Request.ServerVariables["SERVER_NAME"] + Request.RawUrl.ToString()
Non devo preoccuparmi dell'http sicuro, avevo bisogno della variabile servername e RawUrl gestisce il percorso dal nome di dominio e include la querystring se presente.
Se ti serve anche il numero di porta, puoi usare
Request.Url.Authority
Esempio:
string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();
if (Request.ServerVariables["HTTPS"] == "on")
{
url = "https://" + url;
}
else
{
url = "http://" + url;
}
Prova quanto segue:
var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();