Condividi tramite


Percorsi del sito Web ASP.NET

Aggiornamento: novembre 2007

Quando si utilizzano le risorse in un sito Web, è spesso necessario specificarne il percorso. Ad esempio, è possibile utilizzare un percorso URL per fare riferimento a un file di immagine in una pagina o all'URL di una pagina in un altro punto del sito Web. Allo stesso modo, il codice nell'applicazione Web può utilizzare il percorso fisico di un file basato su server per leggere o scrivere il file. ASP.NET fornisce gli strumenti per fare riferimento alle risorse e per determinare i percorsi di pagine o di altre risorse nell'applicazione.

Definizione dei percorsi per le risorse

In molti casi, gli elementi o i controlli sulla pagina devono fare riferimento a una risorsa esterna come, ad esempio, un file. ASP.NET supporta vari metodi per fare riferimento a risorse esterne. Nella scelta del metodo è necessario considerare se si sta utilizzando un elemento lato client o un controllo server Web.

Elementi client

Gli elementi che non sono controlli server Web in una pagina, ovvero gli elementi client, vengono passati al browser invariati. Pertanto, quando si fa riferimento a una risorsa da un elemento client, è necessario creare percorsi conformi alle regole standard per gli URL in HTML. È possibile utilizzare un percorso URL completo (assoluto) o percorsi relativi di vario tipo. Ad esempio, se la pagina contiene un elemento img, è possibile impostare l'attributo src della pagina utilizzando uno dei seguenti percorsi:

  • Un percorso URL assoluto. Un percorso URL assoluto risulta utile se si fa riferimento a risorse che si trovano in un'altra posizione come, ad esempio, un sito Web esterno.

    <img src="https://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
    
  • Un percorso relativo della directory principale, che viene risolto nella directory principale del sito (e non dell'applicazione). I percorsi relativi della directory principale del sito risultano utili se si mantengono risorse presenti in più applicazioni, come, ad esempio, le immagini o i file script client, in una cartella secondaria della directory principale del sito Web.

    Nel seguente esempio si presuppone l'esistenza di una cartella immagini nella directory principale del sito Web.

    <img src="/Images/SampleImage.jpg" />
    

    Se il sito Web fosse https://www.contoso.com, il percorso verrebbe risolto come segue:

    https://www.contoso.com/Images/SampleImage.jpg
    
  • Un percorso relativo risolto nel percorso della pagina corrente:

    <img src="Images/SampleImage.jpg" />
    
  • Un percorso relativo risolto come peer del percorso della pagina corrente.

    <img src="../Images/SampleImage.jpg" />
    
    Nota:

    Per impostazione predefinita, i browser risolvono i percorsi relativi utilizzando come base l'URL della pagina corrente. È possibile tuttavia includere un elemento base HTML in una pagina per specificare un percorso di base alternativo.

Controlli server

Nei controlli server ASP.NET che fanno riferimento alle risorse, è possibile utilizzare percorsi assoluti o relativi, come avviene per gli elementi client. se si utilizzano percorsi relativi, questi vengono risolti in base al percorso della pagina, del controllo utente o del tema in cui si trova il controllo. Si supponga, ad esempio, di disporre di un controllo utente in una cartella dei controlli. Il controllo utente contiene un controllo server Web Image ove la proprietà ImageUrl è impostata sul percorso riportato di seguito: Images/SampleImage.jpg.

Quando il controllo utente è in esecuzione, il percorso verrà risolto come segue: /Controls/Images/SampleImage.jpg. Ciò vale indipendentemente dalla posizione della pagina che contiene il controllo utente.

Nota:

Nelle pagine master, i percorsi delle risorse vengono risolti in base al percorso della pagina contenuto. Per ulteriori informazioni, vedere Informazioni generali sulle pagine master ASP.NET.

I riferimenti ai percorsi assoluti e relativi in un controllo server presentano i seguenti svantaggi:

  • Non è possibile trasferire i percorsi assoluti da un'applicazione all'altra. Se l'applicazione cui fa riferimento il percorso assoluto viene spostata, i collegamenti cesseranno di funzionare.

  • I percorsi relativi nello stile di elementi client risultano difficili da gestire se risorse e pagine vengono spostate in cartelle differenti.

Per ovviare a questi svantaggi, ASP.NET fornisce l'operatore ~ della directory principale dell'applicazione Web, che può essere utilizzato quando viene specificato un percorso nei controlli server. ASP.NET risolve l'operatore ~ nella directory principale dell'applicazione corrente. È possibile utilizzare l'operatore ~ insieme alle cartelle per specificare un percorso basato sulla directory principale corrente.

Nell'esempio riportato di seguito viene illustrato l'utilizzo dell'operatore ~ per specificare un percorso relativo della directory principale di un'immagine quando si utilizza il controllo server Image. Nell'esempio, il file di immagine viene letto dalla cartella immagini che è una sottocartella della directory principale dell'applicazione Web, indipendentemente dalla posizione della pagina nel sito Web.

<asp:image  id="Image1"
  ImageUrl="~/Images/SampleImage.jpg" />

L'operatore ~ può essere utilizzato in qualsiasi proprietà relativa ai percorsi nei controlli server. L'operatore ~ viene riconosciuto solo per i controlli server e nel codice lato server. È impossibile utilizzare l'operatore ~ per gli elementi client.

Nota:

Nel caso di pagine mobili, se l'applicazione si basa su sessioni senza cookie o riceve richieste da dispositivi mobili che richiedono sessioni senza cookie, l'utilizzo di una tilde ("~") in un percorso può causare la creazione involontaria di una nuova sessione e la conseguente perdita dei dati della sessione. Per impostare una proprietà in un controllo mobile con un percorso che include una tilde, ad esempio "~/path", risolvere il percorso utilizzando il metodo ResolveUrl prima di assegnarlo alla proprietà.

Determinazione dei percorsi fisici dei file per il sito Web corrente

Nell'applicazione, potrebbe essere necessario determinare il percorso di un file o di un'altra risorsa sul server. Ad esempio, se l'applicazione legge o scrive un file di testo a livello di codice, è necessario fornire il percorso fisico completo del file ai metodi utilizzati per la lettura e la scrittura.

Non è consigliabile inserire percorsi fisici di file (ad esempio, C:\Website\MyApplication) direttamente nel codice dell'applicazione, perché i percorsi possono cambiare se l'applicazione viene spostata o distribuita. Tuttavia, ASP.NET fornisce altri modi per ottenere un percorso fisico di file all'interno dell'applicazione a livello di codice. È possibile quindi utilizzare il percorso di base del file per creare un percorso completo alla risorsa necessaria. Le due funzionalità ASP.NET più diffuse per la determinazione del percorso di file sono le proprietà dell'oggetto HttpRequest, che restituiscono informazioni sul percorso, e il metodo MapPath.

Nota:

I percorsi fisici di file non devono essere inviati al client perché un utente malintenzionato potrebbe utilizzarli per ottenere informazioni sull'applicazione.

Determinazione del percorso dalle proprietà dell'oggetto Request

Nella tabella riportata di seguito vengono riportate le proprietà dell'oggetto HttpRequest che consentono di determinare i percorsi delle risorse nell'applicazione.

Gli esempi elencati nella tabella si basano sui presupposti seguenti:

  • La richiesta del browser è stata fatta utilizzando l'URL seguente: https://www.contoso.com/MyApplication/MyPages/Default.aspx.

  • Il termine "percorso virtuale" si riferisce alla porzione dell'URL della richiesta che segue l'identificatore del server. In questo caso, il percorso virtuale è il seguente: /MyApplication/MyPages/Default.aspx.

  • Il percorso fisico della directory principale del sito Web è il seguente: C:\inetpub\wwwroot\MyApplication\.

  • Il percorso fisico contiene una cartella denominata MyPages.

Proprietà

Descrizione

ApplicationPath

Ottiene il percorso della directory principale dell'applicazione corrente, indipendentemente dalla posizione in cui viene effettuata la richiesta nell'applicazione. Per l'esempio in esame, la proprietà restituisce quanto segue: /

CurrentExecutionFilePath

Ottiene il percorso virtuale della richiesta corrente. Si differenzia dalla proprietà FilePath perché CurrentExecutionFilePath è corretto se la richiesta è stata reindirizzata al codice lato server. Per l'esempio in esame, la proprietà restituisce quanto segue: /MyApplication/MyPages/Default.aspx

Se si ottiene la proprietà nel codice che si trova in esecuzione come risultato di una chiamata a Transfer o a Execute, il percorso rifletterà la posizione del codice.

FilePath

Ottiene il percorso virtuale della richiesta corrente. Per l'esempio in esame, la proprietà restituisce quanto segue: /MyApplication/MyPages/Default.aspx

A differenza della proprietà CurrentExecutionFilePath, FilePath non riflette i trasferimenti lato server.

Path

Ottiene il percorso virtuale della richiesta corrente. Per l'esempio in esame, la proprietà restituisce quanto segue: /MyApplication/MyPages/default.aspx

PhysicalApplicationPath

Ottiene il percorso fisico di file system della directory principale dell'applicazione in esecuzione. Per l'esempio in esame, la proprietà restituisce quanto segue: C:\inetpub\wwwroot\

PhysicalPath

Ottiene il percorso fisico del file system che corrisponde all'URL richiesto. Per l'esempio in esame, la proprietà restituisce quanto segue: C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx

Utilizzo del metodo MapPath

Il metodo MapPath restituisce il percorso fisico completo di un percorso virtuale che viene passato al metodo. Ad esempio, il codice seguente restituisce il percorso di file per la directory principale del sito Web:

Dim rootPath As String = Server.MapPath("~")
String rootPath = Server.MapPath("~");
Nota:

Il percorso passato al metodo MapPath deve essere un percorso relativo all'applicazione e non un percorso assoluto.

Vedere anche

Concetti

Layout del sito Web ASP.NET

Contesto di pagina e di applicazione nelle applicazioni Web ASP.NET