2009-02-27 21 views
539

Qualcuno può aiutarmi a ottenere l'URL della pagina di lavoro corrente di ASP.NET in C#?Come ottenere l'URL della pagina corrente in C#

+7

@Gordon Quindi qual è? Hai contrassegnato questa domanda come il duplicato ... DI UNA DOMANDA CHE HAI CONTRASSEGNATO COME ESSERE UN DUPLICATO TROPPO, UN MINUTO DOPO. Forse abbiamo bisogno di una richiesta di funzionalità per ottenere StackOverflow per aggiungere "non seguire" ai duplicati contrassegnati, perché tutto quello che volevo era una risposta e il motore di ricerca mi ha portato qui prima. Tuttavia, non farò una tale richiesta, affinché non sia contrassegnato come duplicato. :( –

+2

@MarkAllen non sono sicuro del motivo per cui stai urlando contro di me? Se segui i maledetti, finirai per rispondere alla domanda più vecchia (potrei trovare allora) chiedendo questo: di che si tratta? Non importa dove hai finito la ricerca. Questa pagina ti dà 14 risposte, la chiusa contro una ti dà 15 e quella originale ti dà un'altra 11. Se non volessi chiudere le domande, avresti solo 14, non 40. Nota che hai meno di 10.000 di ripetenti quindi non vedi quelli cancellati – Gordon

+6

@Gordon Scusa se i cappucci ti hanno offeso Sarebbe bello se i duplicati potessero essere esposti in una singola pagina unita. –

risposta

791

Prova questo:

string url = HttpContext.Current.Request.Url.AbsoluteUri; 
// http://localhost:1302/TESTERS/Default6.aspx 

string path = HttpContext.Current.Request.Url.AbsolutePath; 
// /TESTERS/Default6.aspx 

string host = HttpContext.Current.Request.Url.Host; 
// localhost 
+4

AbsolutePath sembra restituire "/" in .NET 3.5 (non hanno testato altre versioni) per percorsi simili agli account utente di Twitter, come http://twitter.com/#!/user . Puoi usare il metodo Fragment per ottenere qualcosa dopo la sterlina (#). –

+2

In realtà questi non sono corretti se usati con un meccanismo di riscrittura come UrlRewriter.net perché questo darà l'URL riscritto. È quindi possibile utilizzare: Request.Url.GetLeftPart (UriPartial.Authority) + Request.RawUrl –

+0

cosa si fa se 'HttpContext.Current' è nullo? – drzaus

41

se si desidera solo la parte tra http: // e la prima barra

string url = Request.Url.Host; 

sarebbero tornati stackoverflow.com se chiamati da questa pagina

Ecco il complete breakdown

+12

Non include la porta. Necessario: 'HttpContext.Current.Request.Url.Port'. – JohnB

+1

@JohnB o piuttosto 'HttpContext.Current.Request.Url.Authority', recuperando' host: port' con una chiamata ... –

7

Una ricerca mi ha atterrato in questa pagina, ma non era proprio quello che stavo cercando. Pubblicazione qui nel caso in cui qualcun altro cerchi ciò che ero atterra anche in questa pagina.

Ci sono due modi per farlo se si ha solo un valore di stringa.

.NET modo:

Uguale @Canavar, ma è possibile creare un'istanza di un nuovo oggetto Uri

String URL = "http://localhost:1302/TESTERS/Default6.aspx"; 
System.Uri uri = new System.Uri(URL); 

che significa che è possibile utilizzare gli stessi metodi, per esempio

string url = uri.AbsoluteUri; 
// http://localhost:1302/TESTERS/Default6.aspx 

string host = uri.host 
// localhost 

modo Regex:

Getting parts of a URL (Regex)

+1

Da notare anche che se la stringa non può essere analizzata genererà un System.FormatException. Tuttavia, il metodo System.Uri.TryCreate è stato introdotto in .NET 4. –

87

solo condividendo come questa è stata la mia soluzione grazie al post di Canavar.

Se hai qualcosa di simile:

"http://localhost:1234/Default.aspx?un=asdf&somethingelse=fdsa" 

o come questo:

"https://www.something.com/index.html?a=123&b=4567" 

e si desidera solo la parte che un utente digita allora questo lavoro:

String strPathAndQuery = HttpContext.Current.Request.Url.PathAndQuery; 
String strUrl = HttpContext.Current.Request.Url.AbsoluteUri.Replace(strPathAndQuery, "/"); 

che risulterebbero in questi:

"http://localhost:1234/" 
"https://www.something.com/" 
+1

Solo per affermare l'ovvio: HttpContext si trova in System.Web, i.e System.Web.HttpContext. msdn: http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx – Sindre

+9

Ancora più semplice è: 'Request.Url.GetLeftPart (UriPartial.Authority)' Vedi qui: https: // msdn .microsoft.com/it-it/library/system.uri.getleftpart (v = vs.110) .aspx –

5

immagino la sua abbastanza per tornare percorso assoluto ..

Path.GetFileName(Request.Url.AbsolutePath) 

using System.IO;

+0

Non penso che soddisferà OP perché fornisce solo il nome della pagina :( – clamchoda

12

Se si desidera ottenere

localhost:2806 

da

http://localhost:2806/Pages/ 

quindi utilizzare:

HttpContext.Current.Request.Url.Authority 
372

Si può a volte bisogno di ottenere valori diversi da URL.

Questi esempio illustra diversi modi per estrarre diverse parti del URL

ESEMPIO: (URL Esempio)

http://localhost:60527/WebSite1test/Default2.aspx?QueryString1=1&QueryString2=2

CODICE

Response.Write("<br/> " + HttpContext.Current.Request.Url.Host); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.Authority); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.Port); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.AbsolutePath); 
Response.Write("<br/> " + HttpContext.Current.Request.ApplicationPath); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.AbsoluteUri); 
Response.Write("<br/> " + HttpContext.Current.Request.Url.PathAndQuery); 

OUTPUT

localhost 
localhost:60527 
60527 
/WebSite1test/Default2.aspx 
/WebSite1test 
http://localhost:60527/WebSite1test/Default2.aspx?QueryString1=1&QueryString1=2 
/WebSite1test/Default2.aspx?QueryString1=1&QueryString2=2 

È possibile copiare incollare il codice di esempio sopra & eseguirlo in asp.net applicazioni web form con diversi URL.

Si consiglia inoltre di leggere il routing ASP.Net nel caso in cui sia possibile utilizzare il routing ASP, quindi non è necessario utilizzare l'URL tradizionale con stringa di query.

http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx

10

un suggerimento per la gente che ha bisogno il percorso/url nel file Global.asax;

Se è necessario eseguire questo in global.asax> Application_Start e modalità di pool di applicazione è integrato quindi si riceverà l'errore di seguito:

richiesta non è disponibile in questo contesto fa eccezione in Application_Start.

In questo caso è necessario utilizzare questo:

System.Web.HttpRuntime.AppDomainAppVirtualPath

spero possa aiutare gli altri ..

16

la richiesta. rawurl fornirà il contenuto della pagina corrente e fornisce il percorso esatto richiesto

uso HttpContext.Current.Request.RawUrl

Problemi correlati