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; } }
}
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top