Si programas en Web Forms estarás muy acostumbrado a utilizar los métodos ResolveUrl y ResolveClientUrl para devolver direcciones Url al código de cliente a partir de direcciones de ASP.NET (es decir, aquellas direcciones que son relativas a la raíz del proyecto y que comienzan con el carácter ~)
Los métodos ResolveUrl y ResolveClientUrl son métodos de la clase System.Web.UI.Control y es por ello que están disponibles tanto en un WebForm (.aspx) como en un control de usuario (.ascx).
Sin embargo, si estamos ejecutando código en un servicio web de ASP.NET (.asmx) no tenemos disponible estas funciones (porque un servicio web hereda de System.Web.Services.WebService) y lógicamente puede ser que queremos devolver al cliente direcciones url válidas a partir de direcciones del tipo ASP.NET (recuerda que son aquellas que incluyen el carácter ~).
En esta situación, nos será muy útil una función como la siguiente que “simula” el comportamiento de ResolveUrl y ResolveClientUrl. Digo “simula” porque con esta función estamos devolviendo rutas absolutas en vez de relativas, pero en cualquier caso estamos devolviendo rutas que el cliente puede consumir.
Imports System.WebPublic Class UtilitiesPublic Shared Function ResolveUrl(ByVal url As String) As StringDim webApplicationRootUrl = _String.Format("{0}://{1}{2}", _HttpContext.Current.Request.Url.Scheme, _HttpContext.Current.Request.ServerVariables.Item("HTTP_HOST"), _HttpContext.Current.Request.ApplicationPath)If Not webApplicationRootUrl.EndsWith("/") ThenwebApplicationRootUrl &= "/"End Ifurl = url.Substring(2) ' Quitar ~/url = webApplicationRootUrl & urlReturn urlEnd FunctionEnd Class
Ahora por ejemplo para una llamada a ResolveUrl("~/Default.aspx"), el método nos devolverá una dirección absoluta como http://localhost:7572/WebSite1/Default.aspx donde:
- http es el esquema.
- localhost:7572 es la variable HTTP_HOST
- WebSite1 es la ruta a la aplicación.
- Default.aspx es la url suministrada al método.
Un saludo!
Excelente
ResponderEliminary podemos anexar eso con un Response.Redirect ?
ResponderEliminarYo creo que sí, sin problemas. Al final Response.Redirect quiere una ruta, si es de servidor, con ~, la convertirá, sino simplemente hará un redirect a la url que nosotros le pasemos.
ResponderEliminarGracias por comentar!
Excelente!
ResponderEliminar