Il comportamento di un'applicazione ASP .NET può essere personalizzato mediante l'uso di opportuni file di configurazione, che hanno nome «Web.config» e sono scritti in formato XML.
È possibile avere un file «Web.config» diverso in ciascuna directory del sito: ognuno di essi applica le impostazioni di configurazione sulla propria directory e su tutte le sottodirectory.
I file di configurazione nelle sottodirectory possono stabilire configurazioni aggiuntive a quelle ereditate dalle directory padre oppure possono sostituire o modificare quelle definite nei livelli superiori.
Un file Web.config può contenere vari tipi di informazioni:
- variabili comuni a tutte le pagine;
- configurazioni per le sessioni;
- opzioni per la gestione degli errori;
- informazioni per la sicurezza.
Abbiamo già accennato al file Web.config in precedenza, quando lo abbiamo aggiunto al progetto per attivare il debug dell'applicazione.
Apriamo uno qualunque dei siti Web che abbiamo realizzato nelle scorse lezioni, cliccando due volte sul file Web.Config all'interno del Solution Explorer si aprirà un file contenente un gran numero di commenti, inseriti automaticamente
allo scopo di facilitare la modifica delle opzioni.
In effetti, prima della versione 2.0 del Framework .NET, il file Web.config poteva essere modificato esclusivamente con un editor di testi; non esisteva alcuno strumento visuale di editing, per cui i commenti erano fondamentali.
ASP .NET 2.0, invece, fornisce anche uno strumento grafico per la configurazione che si basa su un'interfaccia Web ed è raggiungibile facendo cliccando su ASP .NET Configuration nel Solution Explorer.
Il file Web.Config è composto da due sezioni fondamentali: appSettings e system.web:
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings>
</appSettings>
<system.web>
</system.web>
</configuration>
La sezione appSettings contiene le variabili che si vogliono condividere tra tutte le pagine dell'applicazione. Ad esempio:
<add key="Titolo" value="Guida a C#"/>
<add key="Autore" value="Marco Minerva"/>
Per recuperare i valori delle variabili Titolo ed Autore da una qualunque pagina contenuta nella stessa directory del file Web.config, o in una sua
sottodirectory, si deve utilizzare la classe ConfigurationManager:
Label1.Text = ConfigurationManager.AppSettings["Titolo"];
Label2.Text = ConfigurationManager.AppSettings["Autore"];
La sezione system.web, invece, contiene le impostazioni proprie dell'applicazione. Nelle lezioni precedenti abbiamo aggiunto al progetto un file Web.config con debug attivo. A questa scelta corrisponde la seguente opzione in system.web:
<compilation debug="true" />
Di conseguenza, se vogliamo disattivare il debug per il sito Web (ad esempio perché siamo in fase di pubblicazione), è sufficiente impostare tale proprietà su false.
In questa sezione, inoltre, attraverso il tag <customErrors>, è possibile definire la pagina da richiamare in caso di errore:
<customErrors mode="On" defaultredirect="Error.htm" />
Ogni volta che si verifica una situazione imprevista (pagina non trovata, accesso non autorizzato, ecc.), invece del messaggio di errore predefinito sarà visualizzata la pagina Error.htm.
Oltre a Web.config, ad un sito ASP .NET può essere aggiunto un file di nome global.asax. Esso risiede nella directory principale del sito ed è una sorta di "contenitore" di codice comune all'applicazione. Viene impiegato, tra l'altro,
per:
- eseguire operazioni all'avvio e al termine delle sessioni e dell'applicazione;
- eseguire del codice al verificarsi di una condizione di errore.
Per inserire il file global.asax ad un progetto, nella finestra di dialogo «Add New Item» è necessario selezionare la voce Global Application Class. Il file che viene aggiunto include già le dichiarazioni per gli event handler che possono essere definiti.
I commenti inseriti automaticamente spiegano quando i vari eventi sono generati: ad esempio, al verificarsi di un errore, se questo non viene già intercettato dal codice presente nella pagina con un blocco try-catch, viene scatenato l'evento Application_Error.