ASP.NET: Comment obtenir le chemin virtuel d'un fichier à partir d'un gestionnaire générique?
-
28-10-2019 - |
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; } }
}
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.