Le Microsoft Azure Web App, così come le API e Mobile App, sono un servizio che ci permette di ospitare il nostro sito internet all'interno di un hosting IIS completamente gestito. Sia che utilizziamo Web Deploy o FTP, lo spazio che ci viene messo a disposizione è parzialmente raggiungibile da IIS attraverso la cartella wwwroot. Le altre cartelle sono riservate a file di log e ai web job, ma ci è consentito anche leggere e scrivere in tutto lo spazio a noi assegnato, per esempio per depositare nostri file (fino ad 1GB per i piani gratuiti).
Per farlo dobbiamo prima di tutto conoscere la struttura delle cartelle, visibile qui https://github.com/projectkudu/kudu/wiki/File-structure-on-azure. Poiché le API di IO necessitano sempre di un percorso assoluto (per evitare di cercare in system32) è opportuno risolvere sempre in modo corretto il percorso. A questo scopo vengono in aiuto le variabili d'ambiente, visibili a questo indirizzo https://github.com/projectkudu/kudu/wiki/Azure-runtime-environment. La più importante è sicuramente la variabile %HOME% che ci indica il percorso completo al livello radice.
In questo script proponiamo due facili funzioni che ci permettono di risolvere il percorso. Esse sono Environment.GetEnvironmentVariable e Environment.ExpandEnvironmentVariables rispettivamente per risolvere una variabile o convertire un percorso risolvendo le variabili che contiene.
var p = Path.Combine(Environment.GetEnvironmentVariable("HOME"), "miaCartella"); var p2 = Environment.ExpandEnvironmentVariables(@"%HOME%\miaCartella"); // p e p2 sono d:\home\miaCartella
In questo modo i percorsi che utilizziamo sono sicuri e al riparo da problemi in caso di cambiamenti da parte di Microsoft. Ricordiamo infine che il file system di cui la Web App dispone, è condiviso tra le molteplici istanze che possiamo avere ed è perciò importante prestare attenzione ad eventuali conflitti.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire i dati con Azure Cosmos DB Data Explorer
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Generare una User Delegation SAS in .NET per Azure Blob Storage
Gestire la cancellazione di una richiesta in streaming da Blazor
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
La gestione della riconnessione al server di Blazor in .NET 9
Ottenere un token di accesso per una GitHub App
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Implementare l'infinite scroll con QuickGrid in Blazor Server
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API