Moduli IIS con ASP.NET CoreIIS modules with ASP.NET Core

Di Luke LathamBy Luke Latham

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.Some of the native IIS modules and all of the IIS managed modules aren't able to process requests for ASP.NET Core apps. In molti casi, ASP.NET Core offre un'alternativa agli scenari gestiti dai moduli nativi e gestiti di IIS.In many cases, ASP.NET Core offers an alternative to the scenarios addressed by IIS native and managed modules.

Moduli nativiNative modules

La tabella indica i moduli di IIS nativi che funzionano con le app ASP.NET Core e il modulo ASP.NET Core.The table indicates native IIS modules that are functional with ASP.NET Core apps and the ASP.NET Core Module.

ModuloModule Funzionante con le app ASP.NET CoreFunctional with ASP.NET Core apps Opzione di ASP.NET CoreASP.NET Core Option
Autenticazione anonimaAnonymous Authentication
AnonymousAuthenticationModule
Yes
Autenticazione baseBasic Authentication
BasicAuthenticationModule
Yes
Autenticazione mapping certificazione clientClient Certification Mapping Authentication
CertificateMappingAuthenticationModule
Yes
CGICGI
CgiModule
NoNo
Convalida della configurazioneConfiguration Validation
ConfigurationValidationModule
Yes
Errori HTTPHTTP Errors
CustomErrorModule
NoNo Middleware delle tabelle codici di statoStatus Code Pages Middleware
Registrazione personalizzataCustom Logging
CustomLoggingModule
Yes
Documento predefinitoDefault Document
DefaultDocumentModule
NoNo Middleware dei file predefinitiDefault Files Middleware
Autenticazione digestDigest Authentication
DigestAuthenticationModule
Yes
Esplorazione directoryDirectory Browsing
DirectoryListingModule
NoNo Middleware di esplorazione directoryDirectory Browsing Middleware
Compressione dinamicaDynamic Compression
DynamicCompressionModule
Yes Middleware di compressione delle risposteResponse Compression Middleware
Traccia delle richieste non riusciteFailed Requests Tracing
FailedRequestsTracingModule
Yes Registrazione di ASP.NET CoreASP.NET Core Logging
Memorizzazione nella cache dei fileFile Caching
FileCacheModule
NoNo Middleware di memorizzazione nella cache delle risposteResponse Caching Middleware
Memorizzazione nella cache HTTPHTTP Caching
HttpCacheModule
NoNo Middleware di memorizzazione nella cache delle risposteResponse Caching Middleware
Registrazione HTTPHTTP Logging
HttpLoggingModule
Yes Registrazione di ASP.NET CoreASP.NET Core Logging
Reindirizzamento HTTPHTTP Redirection
HttpRedirectionModule
Yes Middleware di riscrittura URLURL Rewriting Middleware
Traccia HTTPHTTP Tracing
TracingModule
Yes
Autenticazione mapping certificati client IISIIS Client Certificate Mapping Authentication
IISCertificateMappingAuthenticationModule
Yes
Restrizioni per IP e dominiIP and Domain Restrictions
IpRestrictionModule
Yes
Filtri ISAPIISAPI Filters
IsapiFilterModule
Yes MiddlewareMiddleware
ISAPIISAPI
IsapiModule
Yes MiddlewareMiddleware
Supporto del protocolloProtocol Support
ProtocolSupportModule
Yes
Filtro richiesteRequest Filtering
RequestFilteringModule
Yes Middleware di riscrittura URL IRuleURL Rewriting Middleware IRule
Monitoraggio richiesteRequest Monitor
RequestMonitorModule
Yes
Riscrittura degli URLURL Rewriting
RewriteModule
Yes Middleware di riscrittura URLURL Rewriting Middleware
Server-Side IncludeServer-Side Includes
ServerSideIncludeModule
NoNo
Compressione staticaStatic Compression
StaticCompressionModule
NoNo Middleware di compressione delle risposteResponse Compression Middleware
Contenuto staticoStatic Content
StaticFileModule
NoNo Middleware dei file staticiStatic File Middleware
Memorizzazione nella cache dei tokenToken Caching
TokenCacheModule
Yes
Memorizzazione nella cache degli URIURI Caching
UriCacheModule
Yes
Autorizzazione URLURL Authorization
UrlAuthorizationModule
Yes Identità di ASP.NET CoreASP.NET Core Identity
Autenticazione di WindowsWindows Authentication
WindowsAuthenticationModule
Yes

†I tipi corrispondenti isFile e isDirectory di URL Rewrite Module non funzionano con le app ASP.NET Core a causa delle modifiche apportate alla struttura di directory.†The URL Rewrite Module's isFile and isDirectory match types don't work with ASP.NET Core apps due to the changes in directory structure.

Moduli gestitiManaged modules

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.Managed modules are not functional with hosted ASP.NET Core apps when the app pool's .NET CLR version is set to No Managed Code. In molti casi, ASP.NET Core offre alternative a livello di middleware.ASP.NET Core offers middleware alternatives in several cases.

ModuloModule Opzione di ASP.NET CoreASP.NET Core Option
AnonymousIdentificationAnonymousIdentification
DefaultAuthenticationDefaultAuthentication
FileAuthorizationFileAuthorization
FormsAuthenticationFormsAuthentication Cookie del middleware di autenticazioneCookie Authentication Middleware
OutputCacheOutputCache Middleware di memorizzazione nella cache delle risposteResponse Caching Middleware
ProfiloProfile
RoleManagerRoleManager
ScriptModule-4.0ScriptModule-4.0
SessioneSession Middleware di sessioneSession Middleware
UrlAuthorizationUrlAuthorization
UrlMappingsModuleUrlMappingsModule Middleware di riscrittura URLURL Rewriting Middleware
UrlRoutingModule-4.0UrlRoutingModule-4.0 Identità di ASP.NET CoreASP.NET Core Identity
WindowsAuthenticationWindowsAuthentication

Modifiche dell'applicazione Gestione IISIIS Manager application changes

Quando si usa Gestione IIS per configurare le impostazioni, il file web.config dell'app viene modificato.When using IIS Manager to configure settings, the web.config file of the app is changed. Se si distribuisce un'app e si include web.config, le eventuali modifiche apportate con Gestione IIS vengono sovrascritte dal file web.config distribuito.If deploying an app and including web.config, any changes made with IIS Manager are overwritten by the deployed web.config file. Se vengono apportate modifiche al file web.config sul server, copiare immediatamente il file web.config aggiornato sul server nel progetto locale.If changes are made to the server's web.config file, copy the updated web.config file on the server to the local project immediately.

Disabilitazione dei moduli IISDisabling IIS modules

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.If an IIS module is configured at the server level that must be disabled for an app, an addition to the app's web.config file can disable the module. È possibile mantenere il modulo e disattivarlo tramite un'impostazione di configurazione (se disponibile) oppure rimuovere il modulo dall'app.Either leave the module in place and deactivate it using a configuration setting (if available) or remove the module from the app.

Disattivazione del moduloModule deactivation

Molti moduli offrono un'impostazione di configurazione che consente di disabilitarli senza rimuovere il modulo dall'app.Many modules offer a configuration setting that allows them to be disabled without removing the module from the app. Questo è il modo più semplice e rapido per disattivare un modulo.This is the simplest and quickest way to deactivate a module. Ad esempio, il modulo di reindirizzamento HTTP può essere disabilitato tramite l'elemento <httpRedirect> in web.config:For example, the HTTP Redirection Module can be disabled with the <httpRedirect> element in web.config:

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

Per altre informazioni sulla disabilitazione dei moduli con le impostazioni di configurazione, usare i collegamenti nella sezione Elementi figlio di IIS <system.webServer>.For more information on disabling modules with configuration settings, follow the links in the Child Elements section of IIS <system.webServer>.

Rimozione dei moduliModule removal

Se si sceglie di rimuovere un modulo con un'impostazione in web.config, sbloccare innanzitutto il modulo e la sezione <modules> di web.config:If opting to remove a module with a setting in web.config, unlock the module and unlock the <modules> section of web.config first:

  1. Sbloccare il modulo a livello di server.Unlock the module at the server level. Selezionare il server IIS nella barra laterale Connessioni di Gestione IIS.Select the IIS server in the IIS Manager Connections sidebar. Aprire Moduli nell'area IIS.Open the Modules in the IIS area. Selezionare il modulo nell'elenco.Select the module in the list. Nella barra laterale Azioni sulla destra selezionare Sblocca.In the Actions sidebar on the right, select Unlock. Se la voce di azione per il modulo viene visualizzata come Blocca, il modulo è già sbloccato e non è richiesta alcuna azione.If the action entry for the module appears as Lock, the module is already unlocked, and no action is required. Sbloccare tutti i moduli che si prevede di rimuovere da web.config in un secondo momento.Unlock as many modules as you plan to remove from web.config later.

  2. Distribuire l'app senza una sezione <modules> in web.config. Se un'app viene distribuita con un file web.config che contiene la sezione <modules> senza aver prima sbloccato la sezione in Gestione IIS, Configuration Manager genera un'eccezione quando si tenta di sbloccare la sezione.Deploy the app without a <modules> section in web.config. If an app is deployed with a web.config containing the <modules> section without having unlocked the section first in the IIS Manager, the Configuration Manager throws an exception when attempting to unlock the section. Di conseguenza, distribuire l'app senza una sezione <modules>.Therefore, deploy the app without a <modules> section.

  3. Sbloccare la sezione <modules> di web.config. Nella barra laterale Connessioni selezionare il sito Web in Siti.Unlock the <modules> section of web.config. In the Connections sidebar, select the website in Sites. Nell'area Gestione aprire Editor configurazione.In the Management area, open the Configuration Editor. Usare i controlli di navigazione per selezionare la sezione system.webServer/modules.Use the navigation controls to select the system.webServer/modules section. Nella barra laterale Azioni sulla destra selezionare Sblocca per la sezione.In the Actions sidebar on the right, select to Unlock the section. 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.If the action entry for the module section appears as Lock Section, the module section is already unlocked, and no action is required.

  4. Aggiungere una sezione <modules> al file web.config locale dell'app con un elemento <remove> per rimuovere il modulo dall'app.Add a <modules> section to the app's local web.config file with a <remove> element to remove the module from the app. Aggiungere più elementi <remove> per rimuovere più moduli.Add multiple <remove> elements to remove multiple modules. Se le modifiche a web.config vengono apportate sul server, apportare immediatamente le stesse modifiche al file web.config del progetto in locale.If web.config changes are made on the server, immediately make the same changes to the project's web.config file locally. La rimozione di un modulo in questo modo non influisce sull'uso del modulo con le altre app nel server.Removing a module using this approach doesn't affect the use of the module with other apps on the 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>:In order to add or remove modules for IIS Express using web.config, modify applicationHost.config to unlock the <modules> section:

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

  2. Individuare l'elemento <section> per i moduli IIS e modificare overrideModeDefault da Deny a Allow:Locate the <section> element for IIS modules and change overrideModeDefault from Deny to Allow:

    <section name="modules"
             allowDefinition="MachineToApplication"
             overrideModeDefault="Allow" />
    
  3. Individuare la sezione <location path="" overrideMode="Allow"><system.webServer><modules>.Locate the <location path="" overrideMode="Allow"><system.webServer><modules> section. Per tutti i moduli che si desidera rimuovere, impostare lockItem da true a false.For any modules that you wish to remove, set lockItem from true to false. Nell'esempio seguente il modulo CGI è sbloccato:In the following example, the CGI Module is unlocked:

    <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.After the <modules> section and individual modules are unlocked, you're free to add or remove IIS modules using the app's web.config file for running the app on IIS Express.

Un modulo IIS può anche essere rimosso con Appcmd.exe.An IIS module can also be removed with Appcmd.exe. Specificare MODULE_NAME e APPLICATION_NAME nel comando:Provide the MODULE_NAME and APPLICATION_NAME in the command:

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

Ad esempio, rimuovere DynamicCompressionModule dal sito Web predefinito:For example, remove the DynamicCompressionModule from the Default Web Site:

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

Configurazione minima dei moduliMinimum module configuration

I soli moduli necessari per eseguire un'app ASP.NET Core sono il modulo di autenticazione anonima e il modulo ASP.NET Core.The only modules required to run an ASP.NET Core app are the Anonymous Authentication Module and the ASP.NET Core Module.

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.The URI Caching Module (UriCacheModule) allows IIS to cache website configuration at the URL level. Senza questo modulo, IIS deve leggere e analizzare la configurazione a ogni richiesta, anche quando lo stesso URL viene richiesto ripetutamente.Without this module, IIS must read and parse configuration on every request, even when the same URL is repeatedly requested. L'analisi della configurazione a ogni richiesta comporta una riduzione significativa delle prestazioni.Parsing the configuration every request results in a significant performance penalty. 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.Although the URI Caching Module isn't strictly required for a hosted ASP.NET Core app to run, we recommend that the URI Caching Module be enabled for all ASP.NET Core deployments.

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.The HTTP Caching Module (HttpCacheModule) implements the IIS output cache and also the logic for caching items in the HTTP.sys cache. Senza questo modulo, il contenuto non viene più memorizzato nella cache in modalità kernel e i profili cache vengono ignorati.Without this module, content is no longer cached in kernel mode, and cache profiles are ignored. La rimozione del modulo di memorizzazione nella cache HTTP in genere ha effetti negativi sulle prestazioni e l'uso delle risorse.Removing the HTTP Caching Module usually has adverse effects on performance and resource usage. 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.Although the HTTP Caching Module isn't strictly required for a hosted ASP.NET Core app to run, we recommend that the HTTP Caching Module be enabled for all ASP.NET Core deployments.

Risorse aggiuntiveAdditional resources