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?

È stato utile?

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top