Come ricavare il percorso fisico da uno virtuale e viceversa?

Scritto da  Luca Cestola il mercoledì 28 luglio 2010  •  Linguaggio: C#,VB   • 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

 
x