Come ricavare il percorso fisico da uno virtuale e viceversa?
Scritto da
Luca Cestola il
mercoledì 28 luglio 2010
•
Linguaggio:
• Livello: 100
Ricavare il percorso fisico da uno virtuale è un'operazione
semplice grazie al metodo MapPath della
classe HttpServerUtility (esposta dalla pagina
aspx attraverso la proprietà Server), mentre non esiste un metodo
già pronto per fare l'opposto. La spiegazione sta nel fatto che un
percorso fisico potrebbe essere incluso in più virtual directory
(senza tener conto della presenza di eventuali meccanismi di
url-rewriting).
Se la configurazione del sito è lineare e quindi
l'alberatura è uno a uno con quella fisica, allora è possibile
ricostruire il percorso fisico da quello virtuale. Ecco un
esempio che possiamo provare facilmente.
C#
protected void Page_Load(object sender, EventArgs e)
{
string rootPath = Server.MapPath("~/");
// Le seguenti variabili sono inizializzate a partire dalla pagina corrente solo a titolo d'esempio
string virtualPath = Request.AppRelativeCurrentExecutionFilePath;
string physicalPath = Server.MapPath(Request.AppRelativeCurrentExecutionFilePath);
// Da percorso virtuale a fisico
Response.Write(Request.AppRelativeCurrentExecutionFilePath + " -> " + Server.MapPath(Request.AppRelativeCurrentExecutionFilePath));
Response.Write("<br/>");
// Da percorso fisico a virtuale
string virtualPathFromPhysic = "~/" + physicalPath.Replace(rootPath, "").Replace("\\", "/");
Response.Write(physicalPath + " -> " + virtualPathFromPhysic);
}
VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim rootPath As String = Server.MapPath("~/")
' Le seguenti variabili sono inizializzate a partire dalla pagina corrente solo a titolo d'esempio
Dim virtualPath As String = Request.AppRelativeCurrentExecutionFilePath
Dim physicalPath As String = Server.MapPath(Request.AppRelativeCurrentExecutionFilePath)
' Da percorso virtuale a fisico
Response.Write((Request.AppRelativeCurrentExecutionFilePath + (" -> " + Server.MapPath(Request.AppRelativeCurrentExecutionFilePath))))
Response.Write("<br/>")
' Da percorso fisico a virtuale
Dim virtualPathFromPhysic As String = ("~/" + Replace(Replace(physicalPath, rootPath, ""), "\\", "/"))
Response.Write((physicalPath + (" -> " + virtualPathFromPhysic)))
End Sub
Tags: ASP.NET