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
Assegnare un valore di default a un parametro di una lambda in C#
Generare velocemente pagine CRUD in Blazor con QuickGrid
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Utilizzare un service principal per accedere a Azure Container Registry
Utilizzare Tailwind CSS all'interno di React: primi componenti
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Verificare la provenienza di un commit tramite le GitHub Actions
Potenziare Azure AI Search con la ricerca vettoriale
Implementare il throttling in ASP.NET Core
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Evitare la script injection nelle GitHub Actions
Eseguire i worklow di GitHub su runner potenziati