ASP.NET: Comment obtenir le chemin virtuel d'un fichier à partir d'un gestionnaire générique?

StackOverflow https://stackoverflow.com/questions/5386412

Question

Comment puis-je résoudre un chemin virtuel vers un fichier en un chemin, adapté au navigateur, à partir d'un gestionnaire .ashx générique?

par exempleje veux convertir:

~/asp/ClockState.aspx

dans

/NextAllowed/asp/ClockState.aspx

Si j'étais un Page WebForm, je pourrais appeler ResolveUrl:

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

qui se résout en:

/NextAllowed/asp/ClockState.aspx

Mais je ne suis pas une page WebForm, je suis un gestionnaire générique.Vous savez, cet objet IHttpHandler avec toutes sortes de choses injectées:

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; } }
}
Était-ce utile?

La solution

Vous pouvez utiliser la classe VirtualPathUtility pour ce faire.Celui-ci contient diverses méthodes pour travailler avec les chemins.Celui dont vous avez besoin est ToAbsolute (), qui convertira un chemin relatif en chemin absolu.

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

Cependant, vous pouvez quand même utiliser le tilde dans les appels Response.Redirect, donc ce qui suit fonctionnerait toujours:

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

Vous n'avez pas besoin de convertir l'URL en un chemin absolu avant d'utiliser Response.Redirect.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top