Moduli IIS con ASP.NET Core

Alcuni dei moduli nativi e tutti i moduli gestiti di IIS non sono disponibili per l'elaborazione delle richieste per le app ASP.NET Core. In molti casi, ASP.NET Core offre un'alternativa agli scenari gestiti dai moduli nativi e gestiti di IIS.

Moduli nativi

La tabella indica i moduli di IIS nativi che funzionano con le app ASP.NET Core e il modulo ASP.NET Core.

Modulo Funzionante con le app ASP.NET Core Opzione di ASP.NET Core
Autenticazione anonima
AnonymousAuthenticationModule
Autenticazione di base
BasicAuthenticationModule
Autenticazione mapping certificazione client
CertificateMappingAuthenticationModule
CGI
CgiModule
No
Convalida della configurazione
ConfigurationValidationModule
Errori HTTP
CustomErrorModule
No Middleware delle tabelle codici di stato
Registrazione personalizzata
CustomLoggingModule
Documento predefinito
DefaultDocumentModule
No Middleware dei file predefiniti
Autenticazione digest
DigestAuthenticationModule
Esplorazione directory
DirectoryListingModule
No Middleware di esplorazione directory
Compressione dinamica
DynamicCompressionModule
Middleware di compressione delle risposte
Traccia delle richieste non riuscite
FailedRequestsTracingModule
Registrazione di ASP.NET Core
Memorizzazione nella cache dei file
FileCacheModule
No Middleware di memorizzazione nella cache delle risposte
Memorizzazione nella cache HTTP
HttpCacheModule
No Middleware di memorizzazione nella cache delle risposte
Registrazione HTTP
HttpLoggingModule
Registrazione di ASP.NET Core
Reindirizzamento HTTP
HttpRedirectionModule
Middleware di riscrittura URL
Traccia HTTP
TracingModule
Autenticazione mapping certificati client IIS
IISCertificateMappingAuthenticationModule
Restrizioni per IP e domini
IpRestrictionModule
Filtri ISAPI
IsapiFilterModule
Middleware
ISAPI
IsapiModule
Middleware
Supporto del protocollo
ProtocolSupportModule
Filtro richieste
RequestFilteringModule
Middleware di riscrittura URL IRule
Monitoraggio richieste
RequestMonitorModule
Riscrittura URL†
RewriteModule
Middleware di riscrittura URL
Server-Side Include
ServerSideIncludeModule
No
Compressione statica
StaticCompressionModule
No Middleware di compressione delle risposte
Contenuto statico
StaticFileModule
No Middleware dei file statici
Memorizzazione nella cache dei token
TokenCacheModule
Memorizzazione nella cache degli URI
UriCacheModule
Autorizzazione URL
UrlAuthorizationModule
ASP.NET Core Identity
Webdav
WebDAV
No
Autenticazione di Windows
WindowsAuthenticationModule

†Il modulo di isFile riscrittura URL e isDirectory i tipi di corrispondenza non funzionano con le app ASP.NET Core a causa delle modifiche apportate alla struttura di directory.

Moduli gestiti

I moduli gestiti non funzionano con le app ASP.NET Core ospitate quando la versione CLR .NET del pool di app è impostata su Nessun codice gestito. In molti casi, ASP.NET Core offre alternative a livello di middleware.

Modulo Opzione di ASP.NET Core
AnonymousIdentification
DefaultAuthentication
FileAuthorization
FormsAuthentication Cookie Middleware di autenticazione
OutputCache Middleware di memorizzazione nella cache delle risposte
Profilo
RoleManager
ScriptModule-4.0
Sessione Middleware di sessione
UrlAuthorization
UrlMappingsModule Middleware di riscrittura URL
UrlRoutingModule-4.0 ASP.NET Core Identity
WindowsAuthentication

Modifiche dell'applicazione Gestione IIS

Quando si usa Gestione IIS per configurare le impostazioni, il file web.config dell'app viene modificato. Se si distribuisce un'app e si include web.config, le eventuali modifiche apportate con Gestione IIS vengono sovrascritte dal file web.config distribuito. Se vengono apportate modifiche al file web.config sul server, copiare immediatamente il file web.config aggiornato sul server nel progetto locale.

Disabilitazione dei moduli IIS

Se un modulo IIS configurato a livello di server deve essere disabilitato per un'app, un'aggiunta al file web.config dell'app consente di disabilitare il modulo. È possibile mantenere il modulo e disattivarlo tramite un'impostazione di configurazione (se disponibile) oppure rimuovere il modulo dall'app.

Disattivazione del modulo

Molti moduli offrono un'impostazione di configurazione che consente di disabilitarli senza rimuovere il modulo dall'app. Questo è il modo più semplice e rapido per disattivare un modulo. Ad esempio, il modulo di reindirizzamento HTTP può essere disabilitato tramite l'elemento <httpRedirect> in web.config:

<configuration>
  <system.webServer>
    <httpRedirect enabled="false" />
  </system.webServer>
</configuration>

Per altre informazioni sulla disabilitazione dei moduli con le impostazioni di configurazione, seguire i collegamenti nella sezione Elementi figlio di IIS <system.webServer>.

Rimozione dei moduli

Se si sceglie di rimuovere un modulo con un'impostazione in web.config, sbloccare innanzitutto il modulo e la sezione <modules> di web.config:

  1. Sbloccare il modulo a livello di server. Selezionare il server IIS nella barra laterale Connessioni di Gestione IIS. Aprire Moduli nell'area IIS. Selezionare il modulo nell'elenco. Nella barra laterale Azioni sulla destra selezionare Sblocca. Se la voce di azione per il modulo viene visualizzata come Blocca, il modulo è già sbloccato e non è richiesta alcuna azione. Sbloccare tutti i moduli che si prevede di rimuovere da web.config in un secondo momento.

  2. Distribuire l'app senza una <modules> sezione in web.config. Se un'app viene distribuita con un file web.config contenente la <modules> sezione senza aver sbloccato prima la sezione in Gestione IIS, Configuration Manager genera un'eccezione quando si tenta di sbloccare la sezione. Di conseguenza, distribuire l'app senza una sezione <modules>.

  3. Sbloccare la <modules> sezione di web.config. Nella barra laterale Connessione ions selezionare il sito Web in Siti. Nell'area Gestione aprire Editor configurazione. Usare i controlli di navigazione per selezionare la sezione system.webServer/modules. Nella barra laterale Azioni sulla destra selezionare Sblocca per la sezione. Se la voce di azione per la sezione del modulo viene visualizzata come Blocca sezione, la sezione del modulo è già sbloccata e non è richiesta alcuna azione.

  4. Aggiungere una sezione <modules> al file web.config locale dell'app con un elemento <remove> per rimuovere il modulo dall'app. Aggiungere più elementi <remove> per rimuovere più moduli. Se le modifiche a web.config vengono apportate sul server, apportare immediatamente le stesse modifiche al file web.config del progetto in locale. La rimozione di un modulo in questo modo non influisce sull'uso del modulo con le altre app nel server.

    <configuration>
     <system.webServer>
       <modules>
         <remove name="MODULE_NAME" />
       </modules>
     </system.webServer>
    </configuration>
    

Per aggiungere o rimuovere i moduli per IIS Express con web.config, modificare applicationHost.config per sbloccare la sezione <modules>:

  1. Aprire {APPLICATION ROOT}\.vs\config\applicationhost.config.

  2. Individuare l'elemento <section> per i moduli IIS e modificare overrideModeDefault da Deny a Allow:

    <section name="modules"
             allowDefinition="MachineToApplication"
             overrideModeDefault="Allow" />
    
  3. Individuare la sezione <location path="" overrideMode="Allow"><system.webServer><modules>. Per tutti i moduli che si desidera rimuovere, impostare lockItem da true a false. Nell'esempio seguente il modulo CGI è sbloccato:

    <add name="CgiModule" lockItem="false" />
    
  4. Dopo aver sbloccato la sezione <modules> e i singoli moduli, è possibile aggiungere o rimuovere i moduli IIS con il file web.config dell'app per l'esecuzione dell'app in IIS Express.

Un modulo IIS può anche essere rimosso con Appcmd.exe. Specificare MODULE_NAME e APPLICATION_NAME nel comando:

Appcmd.exe delete module MODULE_NAME /app.name:APPLICATION_NAME

Ad esempio, rimuovere DynamicCompressionModule dal sito Web predefinito:

%windir%\system32\inetsrv\appcmd.exe delete module DynamicCompressionModule /app.name:"Default Web Site"

Configurazione minima dei moduli

I soli moduli necessari per eseguire un'app ASP.NET Core sono il modulo di autenticazione anonima e il modulo ASP.NET Core.

Il modulo di memorizzazione nella cache degli URI (UriCacheModule) consente a IIS di memorizzare nella cache la configurazione del sito Web a livello di URL. Senza questo modulo, IIS deve leggere e analizzare la configurazione a ogni richiesta, anche quando lo stesso URL viene richiesto ripetutamente. L'analisi della configurazione a ogni richiesta comporta una riduzione significativa delle prestazioni. Anche se il modulo di memorizzazione nella cache degli URI non è strettamente necessario per l'esecuzione di un'app ASP.NET Core ospitata, è consigliabile abilitare il modulo di memorizzazione nella cache degli URI per tutte le distribuzioni di ASP.NET Core.

Il modulo di memorizzazione nella cache HTTP (HttpCacheModule) implementa la cache di output di IIS e anche la logica per la memorizzazione degli elementi nella cache HTTP.sys. Senza questo modulo, il contenuto non viene più memorizzato nella cache in modalità kernel e i profili cache vengono ignorati. La rimozione del modulo di memorizzazione nella cache HTTP in genere ha effetti negativi sulle prestazioni e l'uso delle risorse. Anche se il modulo di memorizzazione nella cache HTTP non è strettamente necessario per l'esecuzione di un'app ASP.NET Core ospitata, è consigliabile abilitare il modulo di memorizzazione nella cache HTTP per tutte le distribuzioni di ASP.NET Core.

Risorse aggiuntive