2011-03-22 28 views
5

¿Cómo puedo resolver una ruta virtual a un archivo en una ruta, adecuada para el navegador, desde un controlador genérico .ashx?ASP.NET: ¿Cómo obtener la ruta virtual de un archivo desde un controlador genérico?

p. Ej. Quiero convertir:

~/asp/ClockState.aspx 

en

/NextAllowed/asp/ClockState.aspx 

Si yo fuera un formulario Web Page, que podría llamar ResolveUrl:

Page.ResolveUrl("~/asp/ClockState.aspx") 

el que resuelve:

/NextAllowed/asp/ClockState.aspx 

Pero no soy una página de WebForm, soy un controlador genérico. Ya sabes, que IHttpHandler objeto con todo tipo de cosas inyectada:

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; } } 
} 

Respuesta

7

Usted puede utilizar la clase VirtualPathUtility para hacer esto. Esto contiene varios métodos para trabajar con rutas. El que necesita es To Absoluto(), que convertirá una ruta relativa a una ruta absoluta.

var path = VirtualPathUtility.ToAbsolute("~/asp/ClockState.aspx"); 

Sin embargo, puede utilizar la tilde en las llamadas Response.Redirect de todos modos, por lo que el siguiente todavía funcionaría:

Response.Redirect("~/asp/ClockState.aspx"); 

No es necesario convertir la URL en una ruta absoluta de respuesta antes de usar .Redirecto.

+0

pensé que había intentado simplemente 'Response.Redirect (...)' y no tuvo en cuenta la carpeta virtual. Pero tanto 'VirtualPathUtility' como' 'Redirect' funcionan. +1 aceptado. –

Cuestiones relacionadas