2009-04-16 14 views
8

Vorrei ottenere l'URL esatto che l'utente ha digitato nel browser. Naturalmente potrei sempre usare qualcosa di simile Request.Url.ToString() ma questo non mi dà ciò che voglio nella seguente situazione:Ottieni l'esatto URL digitato dall'utente nel browser

http://www.mysite.com/rss

con l'URL di sopra di quello Request.Url.ToString() mi darebbe è:

http://www.mysite.com/rss/Default.aspx

Qualcuno sa come realizzare questo?

ho già provato:

  • Request.Url
  • Request.RawUrl
  • this.Request.ServerVariables["CACHE_URL"]
  • this.Request.ServerVariables["HTTP_URL"]
  • ((HttpWorkerRequest)((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest))).GetServerVariable("CACHE_URL")
  • ((HttpWorkerRequest)((IServiceProvider)HttpContext.Current).GetService(typeof(HttpWorkerRequest))).GetServerVariable("HTTP_URL")
+0

Se guardi il codice sorgente di Cassini, vedrai che l'URL richiesto dall'utente viene sovrascritto (in alcuni casi) prima che venga chiamato HttpRuntime.ProcessRequest. Questo praticamente esclude qualsiasi metodo HttpWorkerRequest-agnostico per farlo. –

risposta

6

Modifica: si desidera il HttpWorkerRequest.GetServerVariable() con la chiave HTTP_URL o CACHE_URL. Si noti che il comportamento è diverso tra IIS 5 e IIS 6 (consultare la documentazione delle chiavi).

Al fine di essere in grado di accedere a tutte le variabili del server (nel caso in cui si ottiene null), accedere direttamente al HttpWorkerRequest:

HttpWorkerRequest workerRequest = 
    (HttpWorkerRequest)((IServiceProvider)HttpContext.Current) 
    .GetService(typeof(HttpWorkerRequest)); 
+0

Questo non funziona. Mi dà ancora http://www.mysite.com/rss/Default.aspx –

+0

Ho provato quello (Request.ServerVariables ["HTTP_URL"]) e sto ottenendo null ... –

+0

Non funziona. Got null :( Ho provato ((HttpWorkerRequest) ((IServiceProvider) HttpContext.Current) .GetService (typeof (HttpWorkerRequest))). GetServerVariable ("CACHE_URL") e ((HttpWorkerRequest) ((IServiceProvider) HttpContext.Current) .GetService (typeof (HttpWorkerRequest))). GetServerVariable ("HTTP_URL") –

0
Request.RawUrl 

credo sia la scimmia si sta dopo ...

+0

No, questo è stato anche il mio primo suggerimento (l'ho modificato da allora). – Lucero

4

Ricorda anche che "l'URL esatto che l'utente ha inserito" potrebbe non essere mai disponibile sul server. Ogni collegamento nella catena dalle dita al server può leggermente modificare la richiesta.

Ad esempio, se digito xheo.com nella finestra del browser, IE verrà convertito automaticamente in http://www.xheo.com. Quindi quando la richiesta arriva a IIS dice al browser: vuoi veramente la pagina predefinita a http://www.xheo.com/Default.aspx. Quindi il browser risponde chiedendo la pagina predefinita.

La stessa cosa accade con le richieste di reindirizzamento HTTP 30x. Il server probabilmente vedrà solo la richiesta finale fatta dal browser.

+0

Comprensibile. Im non tanto preoccupato per la parte http: // o www di ciò che l'utente ha inserito. Il mio obiettivo principale è sapere se sono entrati su mysite.com/rss o su mysite.com/rss/default.aspx –

+1

I documenti predefiniti (su IIS) sono internati sul server, non tramite il reindirizzamento client. Questo si applica solo ai nomi delle directory non terminati con un/ – Lucero

+0

Speravo che da qualche parte l'URL originariamente richiesto fosse disponibile ... Stai dicendo che non la pensi così? IIS deve averlo avuto a un certo punto in modo che allora sapesse quale documento predefinito servire? –

3

Provare a utilizzare Request.Url.OriginalString Potrebbe darti la cosa che stai cercando.

0

Il modo più semplice per farlo è utilizzata la programmazione lato client per estrarre l'url esatto:

<script language="javascript" type="text/javascript"> 
document.write (document.location.href); 
</script> 
0

E 'possibile, non vi resta che unisce alcuni dei valori dall'oggetto richiesta per ricostruire l'esatta URL immesso:

Dim pageUrl As String = String.Format("{0}://{1}{2}", 
    Request.Url.Scheme, 
    Request.Url.Host, 
    Request.RawUrl) 

Response.Write(pageUrl) 

Immissione dell'indirizzo http://yousite.com/?hello ritorna esattamente:

http://yousite.com/?hello 
Problemi correlati