File web.config

Nota

Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 10 di questo articolo.

Avviso

Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 10 di questo articolo.

Il web.config è un file letto da IIS e ASP.NET Core Module per configurare un'app ospitata con IIS.

Posizione del file web.config

Per configurare correttamente il modulo ASP.NET Core, il file web.config deve essere presente nel percorso radice del contenuto (in genere il percorso base dell'app) dell'app distribuita. Corrisponde al percorso fisico del sito Web fornito a IIS. Il file web.config deve essere presente nella radice dell'app per abilitare la pubblicazione di più app mediante Distribuzione Web.

I file sensibili si trovano nel percorso fisico dell'app, ad esempio {ASSEMBLY}.runtimeconfig.json, {ASSEMBLY}.xml (commenti della documentazione XML) e {ASSEMBLY}.deps.json dove il segnaposto {ASSEMBLY} è il nome dell'assembly. Quando il file web.config è presente e il sito viene avviato normalmente, IIS non rende disponibili questi file sensibili se vengono richiesti. Se il web.config file è mancante, denominato in modo non corretto o non è in grado di configurare il sito per l'avvio normale, IIS potrebbe gestire pubblicamente i file sensibili.

Il file web.config deve essere sempre presente nella distribuzione, deve essere denominato correttamente ed essere in grado di configurare il sito per l'avvio normale. Non rimuovere mai il file web.config da una distribuzione in produzione.

Se nel progetto non è presente un file web.config, il file viene creato con processPath e arguments corretti per la configurazione del modulo ASP.NET Core. Il file viene quindi spostato nell'output pubblicato.

Se nel progetto è presente un file web.config, il file viene trasformato con processPath e arguments corretti per la configurazione del modulo ASP.NET Core e spostato nell'output pubblicato. La trasformazione non modifica le impostazioni di configurazione di IIS incluse nel file.

Il web.config file potrebbe fornire impostazioni di configurazione IIS aggiuntive che controllano i moduli IIS attivi. Per informazioni sui moduli IIS in grado di elaborare le richieste con app ASP.NET Core, vedere l'articolo moduli IIS.

Una destinazione MSBuild (_TransformWebConfig) gestisce la creazione, la trasformazione e la pubblicazione del web.config file quando il progetto viene pubblicato. Questa destinazione si trova tra le destinazioni Web SDK (Microsoft.NET.Sdk.Web). L'SDK è impostato all'inizio del file di progetto:

<Project Sdk="Microsoft.NET.Sdk.Web">

Per impedire che Web SDK trasformi il file web.config, usare la proprietà <IsTransformWebConfigDisabled> nel file di progetto:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Quando si disabilita Web SDK evitando la trasformazione del file, lo sviluppatore deve impostare manualmente processPath e arguments. Per altre informazioni, vedere Modulo ASP.NET Core (ANCM) per IIS.

Configurazione del modulo core di ASP.NET con web.config

Il Modulo ASP.NET Core è configurato nella sezione aspNetCore del nodo system.webServer del file del sito web.config.

Il file seguente web.config viene pubblicato per una distribuzione dipendente dal framework e configura il modulo ASP.NET Core per gestire le richieste del sito:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet"
                  arguments=".\MyApp.dll"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

Di seguito web.config viene pubblicato per una distribuzione autonoma:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

La InheritInChildApplications proprietà è impostata su false per indicare che le impostazioni specificate all'interno dell'elemento <location> non vengono ereditate dalle app che risiedono in una sottodirectory dell'app.

Quando un'app viene distribuita in Servizio app di Azure, il percorso stdoutLogFile è impostato su \\?\%home%\LogFiles\stdout. Il percorso salva i log stdout nella LogFiles cartella , ovvero un percorso creato automaticamente dal servizio.

Per informazioni sulla configurazione della sotto-applicazione IIS, vedere Configurazione avanzata.

Attributi dell'elemento aspNetCore

Attributo Descrizione Predefinito
arguments

Attributo di tipo stringa facoltativo.

Argomenti per l'eseguibile specificato in processPath.

disableStartUpErrorPage

Attributo booleano facoltativo.

Se vero, la pagina Errore del processo 502.5 viene soppressa e la pagina del codice di stato 502 configurata in web.config ha la precedenza.

false
forwardWindowsAuthToken

Attributo booleano facoltativo.

Se vero, il token viene inoltrato al processo figlio che ascolta su %ASPNETCORE_PORT% come intestazione 'MS-ASPNETCORE-WINAUTHTOKEN' per ogni richiesta. È responsabilità di quel processo chiamare CloseHandle su questo token per ogni richiesta.

true
hostingModel

Attributo stringa facoltativo.

Specifica il modello di hosting in-process (InProcess/inprocess) o out-of-process (OutOfProcess/outofprocess).

OutOfProcess / outofprocess quando non è presente
processesPerApplication

Attributo Integer facoltativo.

Specifica il numero di istanze del processo specificato nell'impostazione processPath che possono essere attivate per ogni app.

†For hosting in-process, il valore è limitato a 1.

L'impostazione di processesPerApplication è sconsigliata. Questo attributo sarà rimosso nelle versioni future.

Impostazione predefinita: 1
Minimo: 1
Max: 100
processPath

Attributo stringa obbligatorio.

Percorso del file eseguibile che avvia un processo in ascolto delle richieste HTTP. I percorsi relativi sono supportati. Se il percorso inizia con ., viene considerato relativo alla radice del sito.

rapidFailsPerMinute

Attributo Integer facoltativo.

Specifica il numero di volte in cui il processo specificato in processPath può arrestarsi in modo anomalo al minuto. Se questo limite viene superato, il modulo smette di avviare il processo per la parte restante del minuto.

Non supportato con l'hosting in-process.

Impostazione predefinita: 10
Minimo: 0
Massimo: 100
requestTimeout

Attributo facoltativo dell'intervallo di tempo.

Specifica la durata per cui il modulo ASP.NET Core attende una risposta dal processo in ascolto su %ASPNETCORE_PORT%.

Nelle versioni del modulo ASP.NET Core fornito con ASP.NET Core 2.1 o versioni successive, requestTimeout viene specificato in ore, minuti e secondi.

Non si applica all'hosting in esecuzione. Per l'hosting in-process, il modulo resta in attesa che l'app elabori la richiesta.

I valori validi per i segmenti della stringa relativi a minuti e secondi sono compresi nell'intervallo tra 0 e 59. L'utilizzo di 60 nel valore per minuti o secondi genera un Errore Interno del Server 500.

Impostazione predefinita: 00:02:00
Minimo: 00:00:00
Massimo: 360:00:00
shutdownTimeLimit

Attributo Integer facoltativo.

Durata in secondi in cui il modulo attende l'arresto normale dell'eseguibile quando viene rilevato il app_offline.htm file.

Impostazione predefinita: 10
Minimo: 0
Massimo: 600
startupTimeLimit

Attributo Integer facoltativo.

Durata in secondi per cui il modulo attende l'avvio di un processo in ascolto sulla porta da parte del file eseguibile. Se questo limite di tempo viene superato, il modulo termina il processo.

Durante l'hosting in-process: Il processo non viene riavviato e non utilizza l'impostazione rapidFailsPerMinute.

Durante l'hosting out-of-process: il modulo tenta di riavviare il processo quando riceve una nuova richiesta e continua a tentare di riavviare il processo nelle richieste in ingresso successive, a meno che l'app non riesca a avviare rapidFailsPerMinute il numero di volte nell'ultimo minuto in sequenza.

Un valore pari a 0 (zero) non è considerato un timeout infinito.

Impostazione predefinita: 120
Minimo: 0
Massimo: 3600
stdoutLogEnabled

Attributo booleano facoltativo.

Se true, stdout e stderr per il processo specificato in processPath vengono reindirizzati al file specificato in stdoutLogFile.

false
stdoutLogFile

Attributo stringa facoltativo.

Specifica il percorso di file relativo o assoluto per il quale stdout e stderr dal processo specificato in processPath vengono registrati. I percorsi relativi sono relativi alla radice del sito. Qualsiasi percorso che inizia con . è relativo al sito radice e tutti gli altri percorsi vengono trattati come percorsi assoluti. Il modulo crea tutte le cartelle fornite nel percorso quando viene creato il file di log. Usando delimitatori di sottolineatura, vengono aggiunti un timestamp, un ID processo e un'estensione di file (.log) all'ultimo segmento del stdoutLogFile percorso. Se .\logs\stdout viene specificato come valore, un log stdout di esempio viene salvato come stdout_20180205194132_1934.log nella logs cartella quando salvato il 5 febbraio 2018 alle 19:41:32 con ID processo 1934.

aspnetcore-stdout

Impostare le variabili di ambiente

È possibile specificare le variabili di ambiente per il processo nell'attributo processPath. Specificare una variabile di ambiente con l'elemento figlio <environmentVariable> di un elemento della raccolta <environmentVariables>. Le variabili di ambiente impostate in questa sezione hanno la precedenza sulle variabili di ambiente di sistema.

Nell'esempio seguente vengono impostate due variabili di ambiente in web.config. ASPNETCORE_ENVIRONMENT configura l'ambiente dell'app su Development. Uno sviluppatore potrebbe impostare temporaneamente questo valore nel web.config file per forzare il caricamento della pagina eccezioni per sviluppatori durante il debug di un'eccezione dell'app. CONFIG_DIR è un esempio di variabile di ambiente definita dall'utente, in cui lo sviluppatore ha scritto il codice che legge il valore all'avvio in modo da formare un percorso per il caricamento del file di configurazione dell'app.

<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile=".\logs\stdout"
      hostingModel="inprocess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>

Nota

Un'alternativa all'impostazione diretta dell'ambiente in web.config consiste nell'includere la <EnvironmentName> proprietà nel profilo di pubblicazione (.pubxml) o nel file di progetto. Questo approccio imposta l'ambiente in web.config quando il progetto viene pubblicato:

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

Avviso

Impostare la variabile di ambiente ASPNETCORE_ENVIRONMENT su Development solo in server di gestione temporanea e test che non sono accessibili da reti non attendibili, ad esempio Internet.

Configurazione di IIS con web.config

Configurazione IIS è influenzata dalla sezione di web.config per gli scenari IIS utilizzati in app ASP.NET Core con il modulo ASP.NET Core. Ad esempio, la configurazione di IIS è funzionale per la compressione dinamica. Se IIS è configurato a livello di server per l'uso della compressione dinamica, l'elemento <urlCompression> nel file dell'app web.config può disabilitarlo per un'app ASP.NET Core.

Per altre informazioni, vedere gli articoli seguenti:

Per impostare le variabili di ambiente per le singole app in esecuzione in pool di app isolate (supportato per IIS 10.0 o versione successiva), vedere la AppCmd.exe sezione relativa al comando dell'articolo Variabili <environmentVariables>di ambiente nella documentazione di riferimento di IIS.

Sezioni di configurazione di web.config

Le sezioni di configurazione di ASP.NET app 4.x in web.config non vengono usate dalle app ASP.NET Core per la configurazione:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

Le applicazioni ASP.NET Core vengono configurate tramite altri provider di configurazione. Per altre informazioni, vedere Configurazione.

Trasformazione di web.config

Se è necessario trasformare web.config in fase di pubblicazione, vedere Trasformare web.config. Potrebbe essere necessario trasformare web.config durante la pubblicazione per impostare le variabili di ambiente in base alla configurazione, al profilo o all'ambiente.

Risorse aggiuntive