ASP.NET: come ottenere il percorso virtuale di un file da un gestore generico?
-
28-10-2019 - |
Domanda
Come posso risolvere un percorso virtuale in un file in un percorso, adatto al browser, dall'interno di un gestore generico .ashx?
ad esempio, voglio convertire:
~/asp/ClockState.aspx
in
/NextAllowed/asp/ClockState.aspx
Se fossi un Webform Page
, potrei chiamare ResolveUrl
:
Page.ResolveUrl("~/asp/ClockState.aspx")
che si risolve a:
/NextAllowed/asp/ClockState.aspx
Ma non sono una pagina Webform, sono un gestore generico. Sai, quello IHttpHandler
oggetto con tutti i tipi di cose iniettate:
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; } }
}
Soluzione
È possibile utilizzare la classe VirtualPathutility per farlo. Questo contiene vari metodi per lavorare con i percorsi. Quello di cui hai bisogno è Toabsolute (), che convertirà un percorso relativo in assoluto.
var path = VirtualPathUtility.ToAbsolute("~/asp/ClockState.aspx");
Tuttavia, è possibile utilizzare il tilde in risposta. Riretto Chiamate Comunque, quindi quanto segue funzionerebbe ancora:
Response.Redirect("~/asp/ClockState.aspx");
Non è necessario convertire l'URL in un percorso assoluto prima di usare Response.rerect.