ASP.NET: ¿Cómo obtener la ruta virtual de un archivo de un controlador genérico?
-
28-10-2019 - |
Pregunta
¿Cómo puedo resolver una ruta virtual a un archivo en una ruta, adecuada para el navegador, desde un manejador .ashx genérico?
por ejemplo, quiero convertir:
~/asp/ClockState.aspx
dentro
/NextAllowed/asp/ClockState.aspx
Si yo fuera una forma web Page
, podría llamar ResolveUrl
:
Page.ResolveUrl("~/asp/ClockState.aspx")
que resuelve:
/NextAllowed/asp/ClockState.aspx
Pero no soy una página de Forma web, soy un manejador genérico. Tú lo sabes IHttpHandler
Objeto con todo tipo de cosas inyectadas:
public class ResetClock : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
//[process stuff]
//Redirect client
context.Response.Redirect("~/asp/ClockState.aspx", true);
}
public bool IsReusable { get { return false; } }
}
Solución
Puede usar la clase VirtualPathutility para hacer esto. Esto contiene varios métodos para trabajar con rutas. El que necesita es ToabSolute (), que convertirá una ruta relativa a una absoluta.
var path = VirtualPathUtility.ToAbsolute("~/asp/ClockState.aspx");
Sin embargo, puede usar el Tilde en respuesta. Redirect Llamadas de todos modos, por lo que lo siguiente aún funcionaría:
Response.Redirect("~/asp/ClockState.aspx");
No necesita convertir la URL en una ruta absoluta antes de usar respuesta.