2009-04-16 4 views
8

Me gustaría obtener la URL exacta que el usuario ingresó en el navegador. Por supuesto que siempre podría utilizar algo como Request.Url.ToString() pero esto no me da lo que quiero en la siguiente situación:Obtenga la URL exacta que el usuario ingresó en el navegador

http://www.mysite.com/rss

Con la url por encima de lo Request.Url.ToString() me daría es:

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

¿Alguien sabe cómo lograr esto?

Ya he probado:

  • 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

Si Si mira el código fuente de Cassini, verá que la URL solicitada por el usuario se sobrescribe (en ciertos casos) antes de que se llame a HttpRuntime.ProcessRequest. Eso prácticamente descarta cualquier forma HttpWorkerRequest-agnostic de hacer esto. –

Respuesta

6

Editar: Desea HttpWorkerRequest.GetServerVariable() con la clave HTTP_URL o CACHE_URL. Tenga en cuenta que el comportamiento difiere entre IIS 5 e IIS 6 (consulte la documentación de las claves).

Con el fin de poder acceder a todas las variables del servidor (en el caso de que se null), acceder directamente a la HttpWorkerRequest:

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

Eso no funciona. Todavía me da http://www.mysite.com/rss/Default.aspx –

+0

Intenté eso (Request.ServerVariables ["HTTP_URL"]) y estoy obteniendo nulo ... –

+0

No funciona. Tengo nulo :( He intentado ((HttpWorkerRequest) ((IServiceProvider) HttpContext.Current). GetServerVariable ("CACHE_URL") y ((HttpWorkerRequest) ((IServiceProvider) HttpContext.Current) .GetService (typeof (HttpWorkerRequest))). GetServerVariable ("HTTP_URL") –

0
Request.RawUrl 

Creo que es el mono que está después ...

+0

No, esa fue mi primera sugerencia también (lo he editado desde entonces). – Lucero

4

Recuerde también que la "URL exacta que ingresó el usuario" puede que nunca esté disponible en el servidor. Cada enlace en la cadena desde los dedos hasta el servidor puede modificar ligeramente la solicitud.

Por ejemplo, si escribo xheo.com en la ventana de mi navegador, IE se convertirá automáticamente en http://www.xheo.com. Luego, cuando la solicitud llega a IIS, le dice al navegador: realmente desea la página predeterminada al http://www.xheo.com/Default.aspx. Entonces el navegador responde preguntando por la página predeterminada.

Lo mismo ocurre con las solicitudes de redireccionamiento HTTP 30x. Es probable que el servidor solo vea la solicitud final realizada por el navegador.

+0

Comprensible. No estoy tan preocupado por la parte http: // o www de lo que el usuario ingresó. Mi objetivo principal es saber si ingresaron en mysite.com/rss o mysite.com/rss/default.aspx –

+1

Los documentos predeterminados (en IIS) se guardan internamente en el servidor, no a través de la redirección del cliente. Esto solo se aplica a los nombres de directorio que no terminaron con un/ – Lucero

+0

. Tenía la esperanza de que en alguna parte el url originalmente solicitado estuviera disponible ... ¿Estás diciendo que no lo crees? IIS tiene que haberlo tenido en algún momento para que luego supiera qué documento predeterminado servir. –

3

Probar usando Request.Url.OriginalString Podría darle lo que está buscando.

0

La manera más fácil de hacer esto se utiliza la programación del lado del cliente para extraer la url exacta:

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

Es posible, sólo tiene que combinar algunos de los valores del objeto de petición para reconstruir la exacta URL introducida:

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

Response.Write(pageUrl) 

Introducción de la dirección http://yousite.com/?hello vuelve exactamente:

http://yousite.com/?hello 
Cuestiones relacionadas