Il Web.config è il file di configurazione delle applicazioni ASP.Net, è case sensitive poichè si basa sullo standard XML e ciò lo rende potente e semplice allo stesso tempo.

Sono ammessi più file Web.config per ogni applicazione, uno per ogni sottocartella e ogni sottocartella eredita le impostazioni della cartella padre. In questi nuovi file Web.config bisognerebbe includere solo le impostazioni di configurazione di cui si desidera fare l'override: tutte le altre impostazioni saranno ereditate dal file Web.config della cartella padre o, se tale file non esiste o non contiene le impostazioni per tutti gli elementi di configurazione disponibili, dal file Machine.config del server Web.

Tutti gli elementi sono nidificati dentro l'elemento di nome <configuration> e gli elementi non necessari possono essere omessi.

Ecco un esempio di file Web.config vuoto:

                        
<?xml version="1.0"?>
<configuration>
  <system.web>
    
  </system.web>
  <system.webServer>

  </system.webServer>
  <appSettings/>
<configuration> 
                    

I file di configurazione vengono raggruppati in sezioni che contengono le impostazioni per le singole funzionalità: le sezioni principali, nidificate dentro il tag <configuration>, sono due:

<system.web>: Contiene tutte le impostazioni di configurazione predefinite di ASP.net.

<appSettings>: Può contenere eventuali variabili di configurazione introdotte dal programmatore sottoforma di coppia chiave/valore, che potranno essere lette a runtime dall'applicazione.
Un esempio classico è quello di inserire la stringa di connessione al database:

                        
<appSettings
   key="Database" 
   value="Stringa_di_connessione_al_database" />

Da codice possiamo poi leggere i valori dichiarati in questo modo:
dim sDB as string = ConfigurationSettings.AppSettings("Database")  
                    


Vediamo ora in specifico la parte <system.web>:

1) La sezione <compilation> viene utilizzata per configurare le impostazioni richieste da ASP.NET nel compilare le applicazioni Web, cosa necessaria per soddisfare le richieste degli utenti. Essenzialmente si vanno a modificare due attributi importanti:

- debug: Durante la fase di test / sviluppo, si dovrebbe impostare questo attributo su true per poi reimpostarlo a False alla fine del ciclo di sviluppo, quando l’applicazione viene eseguita sul server di produzione, al fine di ottimizzare le prestazioni.
- targetFramework: Questo attributo specifica la versione di .NET Framework da utilizzare per il sito Web. Questo attributo deve essere incluso solo per siti Web destinati a .NET Framework 4 e versioni successive.

Ecco un esempio della sezione <compilation> :

                        
<compilation debug="true" targetFramework="4.0" /> 
                    


2) La sezione <customErrors> viene utilizzata per quando si verificano errori non gestiti durante l'esecuzione di una richiesta Web. E' possibile fornire informazioni aggiuntive all'utente o definire delle pagine di errore personalizzate. Per fare ció andremo a modificare i seguenti attributi:

- mode: Specifica se abilitare o disabilitare gli errori personalizzati. I valori possibili sono:
> On: gli errori personalizzati sono attivati. Se non si specifica alcun attributo defaultRedirect, viene visualizzato un errore generico.
> Off: Specifica che gli errori personalizzati sono disabilitati.
> RemoteOnly: Specifica che gli errori personalizzati vengono visualizzati solo sui client remoti, mentre gli errori ASP.NET dettagliati vengono visualizzati sull'host locale. Rappresenta il valore predefinito.
- defaulRedirect: Specifica l'URL predefinito a cui viene indirizzato un browser se si verifica un errore. Se non si specifica questo attributo, viene invece visualizzato un errore generico.

Ecco un esempio della sezione <customErrors> :

                        
<customErrors mode="On" defaultRedirect="~/paginaerrore.aspx">
      <error statusCode="404" redirect="~/404.aspx"/>
</customErrors> 
                    


3) La sezione <authentication> è utilizzata per gestire l'autenticazione in un'applicazione. ASP.NET è in grado di autenticare le credenziali, ossia nome e password, di un utente del sito Web.
Tramite l'attributo mode nella sezione <authentication> è possibile specificare il tipo di autenticazione per l'applicazione web. L'impostazione predefinita è quella Windows, dove le informazioni sull'account dell'utente di Windows vengono utilizzate per l'autenticazione. In caso di utenti Internet, è necessario utilizzare uno schema diverso come l'autenticazione basata su form ASP.NET.
Esiste infine una terza modalità di autenticazione ossia quella basata su Microsoft Passport.

                        
<authentication mode="Windows"/> 
                    


4) Tramite la sezione <globalization> è possibile configurare le impostazioni internazionali e le impostazioni per specificare la lingua da associare alle richieste Web e alle ricerche locali.

Per l'italiano è sufficiente impostarla in questo modo (vedere anche l'articolo Gestire il charset ISO 8859-1 di una pagina web):

                        
<globalization
   culture="IT-it"
   uiCulture="IT-it"
   requestEncoding="iso-8859-1"
   responseEncoding="iso-8859-1" />  
                    


5) L'elemento <pages> consente di impostare i valori predefiniti per gli attributi a livello di pagina, più comunemente associati agli attributi della direttiva di ASP.NET @Page.
Le impostazioni di questo elemento si applicano a tutte le pagine per le quali non vengono visualizzati attributi specifici della direttiva @Page. Se questi attributi vengono visualizzati in una pagina ASP.NET, verrà eseguito l'override delle impostazioni nei file di configurazione Machine.config o Web.config.
In quanto tale, questo elemento fornisce un valido modo per configurare le impostazioni SessionState, ViewState e altre a livello di applicazione o sottocartella, consentendo di controllare in modo efficace l'applicazione.

La sintassi è:

                        
<pages
	autoEventWireup="true"
	buffer="true"
	enableSessionState="true"
	enableViewState="true" />  
    
- autoEventWireup consente di determinare se il supporto per gli eventi delle pagine (Page_Load e così via) viene automaticamente fornito nelle pagine ASP.NET di un'applicazione.
- buffer specifica se le risposte vengono memorizzate nel buffer prima dell'invio al client (analogamente al Response.Buffer dell'ASP classico).
- enableSessionState consente di determinare se in base all'impostazione predefinita viene creata una nuova sessione per l'utente corrente da una pagina ASP.NET. Se l'utente dispone già di una sessione da una pagina precedente in cui questo attributo è impostato su false, tale sessione non verrà modificata da questo attributo. Tuttavia, se è impostata su ReadOnly, la pagina non sarà in grado di modificare i valori impostati nelle pagine precedenti.
- enableViewState consente di determinare se è attivato il metodo ViewState con cui i controlli server ASP.NET memorizzano lo stato tra una richiesta di pagina e l'altra.


6) L'elemento <trace> consente di attivare o disattivare l'analisi dell'intera applicazione e di impostare i parametri della funzionalità di analisi.

Un esempio è:

                        
<trace
	enabled="true"
	localOnly="false"
	pageOutput="true"
	requestLimit="10"
	traceMode="SortByTime" />  

L'analisi è attivata, le informazioni sull'analisi sono visibili da qualsiasi computer e non solo dal server Web, l'output di analisi viene aggiunto a ogni pagina nell'ambito del file di configurazione, il numero di richieste memorizzate per l'esame tramite l'URL trace.axd è 10 ordinate in base all'ordine di elaborazione degli eventi.   
                    


7) Attraverso la sezione <sessionState> è possibile configurare l'HttpModule di Sessione State, inclusi il tipo di gestione dello stato da utilizzare (in-process, out-of-process o SQL server), il timeout di sessione predefinito e se utilizzare i cookie per associare le richieste alle sessioni utente.

Per fare ció andremo a modificare i seguenti attributi:
- connectioString: Consente di specificare il server e il numero di porta a cui connettersi quando l'attributo mode è impostato su StateServer.
- cookieless: consente di determinare se le sessioni utente sono mappate alle richieste tramite i cookie o aggiungendo il SessionID di un utente alla stringa degli URL relative alle richieste di tale utente.
- timeout: specifica il periodo in minuti prima che scada la sessione utente.
- mode: Determina il tipo di gestione dello stato della sessione che verrà utilizzato dall'applicazione. I valori possibili sono:
> Off: lo stato della sessione è disattivato.
> Inproc: lo stato della sessione è memorizzato in-process con l'applicazione
> State Server: lo stato della sessione è gestito da un servizio NT out-of-process, che consente a più server in una web farm di condividere un solo archivio dello stato
> SQLServer: lo stato della sessione è gestito da un database di SQL Server, che consente a più server in una web farm di condividere un solo archivio dello stato.
- sqlConnectionString: specifica la stringa di connessione utilizzata per connettersi ad un database SQL Server in cui sono memorizzate le informazioni sullo stato. Questo attributo è necessario quando la modalità è impostata su SQLServer.

Ecco un esempio della sezione <sessionState> :

                        
<sessionState
  connectioString="tcpip=127.0.0.1:42424"
  cookieless="false" />
  timeout="20"
  mode="Inproc"
  sqlConnectionString="Stringa di connessione sql"  />  
                    


8) Dall'elemento <httpRuntime> vengono controllati diversi aspetti del modulo di runtime http di ASP.NET.

I suoi attributi sono:
- appRequestQueueLimit: specifica il numero di richieste che verranno accodate da ASP.NET quando non esistono thread disponibili per elaborarle, prima di restituire un messaggio di errore "503 - Server occupato".
- executionTimeout: imposta il periodo (in secondi) per elaborare una richiesta prima di interromperla.
- maxRequestLength: imposta le dimensione massime (in Kilobyte) dei file caricati in arrivo.
- minFreeThreads: consente di configurare il numero minimo di thread che resteranno liberi in ASP.NET per l'elaborazione di nuove richieste.

La sintassi è la seguente:

                        
<httpRuntime
  appRequestQueueLimit="100"
  executionTimeout="60"
  maxRequestLength="2048" 
  minFreeThreads="8" />  
                    


9) L'elemento <identity> imposta l'identità con cui viene eseguito ASP.Net.

Il suo attributo è:
- impersonation che può avere due valori:
> true: se name e password sono omessi, ASP.net verrà eseguito con l'identità fornita da IIS, altrimenti con quella specificata da name e password.
> false: disattiva la rappresentazione degli account di protezione per le applicazioni ASP.NET.

La sintassi è la seguente:

                        
<identity 
  impersonation="true"
  userName="username"
  password="pass" />  
                    


10) L'elemento <machineKey> consente di specificare le chiavi da utilizzare per la crittografia e la decrittografia dei dati dei cookie nell'autenticazione basata su form.

I suoi attributi sono:
- decryptionKey consente di determinare se la chiave di decrittazione da utilizzare sia generate automaticamente o di specificare un valore chiave da utilizzare (una stringa di minimo 40 caratteri e massimo 128)
- validationKey consente di determinare se la chiave di convalida da utilizzare venga generate automaticamente o di specificare un valore chiave da utilizzare (come sopra da minimo 40 caratteri e massimo 128)
- validation specifica l'algoritmo utilizzato per la crittografia. I tre possibili valori di validation possono essere SHA1, MD5, 3DES

La sintassi è la seguente:

                        
<machineKey 
  decryptionKey="AutoGenerate"
  validationKey="AutoGenerate"
  validation="MD5" />