Pregunta

Estoy buscando una forma de resolver una URL relativa de la manera en que lo haría con una página o instancia de control (MSDN DOCS) como:

Page.ResolveUrl("~/common/Error.aspx");

... Pero cuando solo tengo un httpContext disponible para mí, como cuando estoy en un httphandler.

¿Necesitaré usar una función personalizada, como la que se ve? aquí?

¿O hay alguna forma de llegar a la función subyacente utilizada por la página?

¿Fue útil?

Solución

Intente obtener la página del controlador y use ResolveUrl, o crear un objeto de control ...

(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");

O usar VirtualPathUtility.ToAppRelative(string) o VirtualPathUtility.ToAbsolute(string)

Por ejemplo:

System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");

devoluciones

/WebSite/Styles/Contoso.xslt

Otros consejos

Esta pregunta en So (ASP.NET: Uso de System.Web.UI.Control.Resolveurl () en una función compartida/estática) se ve un poco útil ... básicamente, puedes usar el Virtual Pathutility clase que está bajo el espacio de nombres System.Web. Hay una respuesta adicional a esa pregunta que dice que tenga cuidado con los parámetros de consulta, pero también se proporciona una solución a eso.

¡Al mismo tiempo, el código de Rick Strahl es bastante bueno!

Use algo como esto: los controles son un nombre de carpeta en su aplicación y MyController es el nombre del controlador. Para crear e instancia y cargar el controlador, puede hacerlo:

Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));

Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top