Devo essere in grado di ottenere l'URL completo della pagina in cui mi trovo da un controllo utente. Si tratta solo di concatenare insieme un mucchio di variabili Request? Se sì, quali? O c'è un modo più semplice?
Devo essere in grado di ottenere l'URL completo della pagina in cui mi trovo da un controllo utente. Si tratta solo di concatenare insieme un mucchio di variabili Request? Se sì, quali? O c'è un modo più semplice?
Risposte:
Di solito lo uso Request.Url.ToString()
per ottenere l'URL completo (inclusa la querystring), non è richiesta alcuna concatenazione.
Request.Url.ToString()
non è incluso queryString.
Ecco un elenco a cui mi riferisco normalmente 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.QueryString
ritorna q=qvalue
soltanto
Request.Url.AbsoluteUri
Questa proprietà fa tutto il necessario, tutto in una chiamata succinta.
Perché ASP.NET Core
dovrai precisarlo:
@($"{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 questo@using
Request.RawUrl
se hai bisogno dell'URL completo in quanto tutto, dall'http alla stringa di query, devi 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")
Meglio usare Request.Url.OriginalString
di Request.Url.ToString()
(secondo MSDN )
OriginalString
.
Grazie ragazzi, ho usato una combinazione di entrambe le vostre risposte @Christian e @Jonathan per le mie specifiche esigenze.
"http://" + Request.ServerVariables["SERVER_NAME"] + Request.RawUrl.ToString()
Non devo preoccuparmi di http sicuro, avevo bisogno della variabile servername e RawUrl gestisce il percorso dal nome di dominio e include la stringa di query se presente.
Prova quanto segue:
var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();