resolveurl in class c#
ResolveUrl sin una página ASP.NET (3)
Estoy buscando una manera de resolver una url relativa de la manera que lo haría con una instancia de página o control ( MSDN Docs ) como:
Page.ResolveUrl("~/common/Error.aspx");
... pero cuando solo tengo un HttpContext disponible para mí, como cuando estoy en HttpHandler.
¿Tendré que usar una función personalizada, como la que se ve here ?
¿O hay una forma de llegar a la función subyacente utilizada por la Página.
Esta pregunta en SO ( ASP.Net: Usar System.Web.UI.Control.ResolveUrl () en una función compartida / estática ) parece útil ... Básicamente, puede usar la clase VirtualPathUtility que está bajo System.Web espacio de nombres Hay una respuesta adicional a esa pregunta que dice que tenga cuidado con los parámetros de QueryString, pero también se proporciona una solución.
¡Al mismo tiempo, el código de Rick Strahl es bastante limpio!
Intenta obtener la página del controlador y usa ResolveUrl
, o crea un objeto de Control ...
(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");
O use VirtualPathUtility.ToAppRelative(string)
o VirtualPathUtility.ToAbsolute(string)
Por ejemplo:
System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");
devoluciones
/WebSite/Styles/Contoso.xslt
Use algo como esto: Controles es un nombre de carpeta en su aplicación y myController es el nombre del controlador. Para crear e instanciar y cargar el controlador, puede hacerlo de la siguiente manera:
Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));
Espero que esto ayude.