2010-03-11 12 views
12

Estoy trabajando en una aplicación web que utiliza un HttpModule de terceros que realiza la reescritura de URL.Cómo obtener la URL original después de que se haya llamado a HttpContext.RewritePath()

Quiero saber si hay alguna forma de determinar la url original más adelante en el evento Application_BeginRequest. Por ejemplo ...

url original:
http://domain.com/products/cool-hat.aspx

reescrito url (del 3 HttpModule partido):
http://domain.com/products.aspx?productId=123

En el pasado he escrito HttpModules que almacenan la dirección URL original en HttpContext.Items pero, esta es una aplicación de terceros y no tengo forma de hacerlo.

Cualquier idea sería apreciada.

Respuesta

1

Crea un nuevo HttpModule para que sirva como un contenedor (hereda) el módulo de terceros y haz lo que quieras con él.

En su caso, anule la función apropiada (ProcessRequest?) Y almacene la url original en HttpContext.Items, y luego llame a la implementación MyBase. Debería funcionar bien

+6

¿Por qué irías con todos estos problemas ...? Simplemente use la propiedad RawUrl de la Solicitud. Mucho mucho más simple que todo este problema del módulo. El módulo también tiene su sobrecarga ... – Yuki

27

Prueba esto:

string originalUrl = HttpContext.Current.Request.RawUrl; 

La dirección URL original se encuentra dentro de esta propiedad.

8

Tuve el mismo problema, pero quería la URL totalmente calificada (RawUrl le proporciona solo la parte Ruta y Consulta). Por lo tanto, para construir sobre la respuesta de Josh:

string originalUrlFull = 
    Page.Request.Url.GetLeftPart(System.UriPartial.Authority) + 
    Page.Request.RawUrl 
5

Sé que esta pregunta fue hecha hace mucho tiempo. Sin embargo, esto es lo que yo uso:

System.Uri originalUri = new System.Uri(Page.Request.Url, Page.Request.RawUrl) 

Una vez que tenga el URI que puede hacer un ToString() para obtener la cadena, o Cal cualquiera de los métodos/propiedades para obtener las piezas.

Cuestiones relacionadas