Módulos de IIS con ASP.NET CoreIIS modules with ASP.NET Core

Algunos de los módulos nativos de IIS y todos los módulos administrados de IIS no pueden procesar las solicitudes para las aplicaciones 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. En muchos casos, ASP.NET Core ofrece una alternativa a los escenarios abordados por los módulos nativos y administrados de IIS.In many cases, ASP.NET Core offers an alternative to the scenarios addressed by IIS native and managed modules.

Módulos nativosNative modules

En la tabla se indican los módulos nativos de IIS que son funcionales con aplicaciones ASP.NET Core y el módulo ASP.NET Core.The table indicates native IIS modules that are functional with ASP.NET Core apps and the ASP.NET Core Module.

ModuleModule Funcional con aplicaciones ASP.NET CoreFunctional with ASP.NET Core apps Opción de ASP.NET CoreASP.NET Core Option
Autenticación anónimaAnonymous Authentication
AnonymousAuthenticationModule
Yes
Autenticación básicaBasic Authentication
BasicAuthenticationModule
Yes
Autenticación de asignaciones de certificados de clienteClient Certification Mapping Authentication
CertificateMappingAuthenticationModule
Yes
CGICGI
CgiModule
NoNo
Validación de configuraciónConfiguration Validation
ConfigurationValidationModule
Yes
Errores HTTPHTTP Errors
CustomErrorModule
NoNo Middleware de páginas de códigos de estadoStatus Code Pages Middleware
Registro personalizadoCustom Logging
CustomLoggingModule
Yes
Documento predeterminadoDefault Document
DefaultDocumentModule
NoNo Middleware de archivos predeterminadosDefault Files Middleware
Autenticación implícitaDigest Authentication
DigestAuthenticationModule
Yes
Examen de directoriosDirectory Browsing
DirectoryListingModule
NoNo Middleware de exploración de directoriosDirectory Browsing Middleware
Compresión dinámicaDynamic Compression
DynamicCompressionModule
Yes Middleware de compresión de respuestasResponse Compression Middleware
Seguimiento de solicitudes con errorFailed Requests Tracing
FailedRequestsTracingModule
Yes Registro de ASP.NET CoreASP.NET Core Logging
Almacenamiento en caché de archivosFile Caching
FileCacheModule
NoNo Middleware de almacenamiento en caché de respuestasResponse Caching Middleware
Almacenamiento en caché HTTPHTTP Caching
HttpCacheModule
NoNo Middleware de almacenamiento en caché de respuestasResponse Caching Middleware
Registro HTTPHTTP Logging
HttpLoggingModule
Yes Registro de ASP.NET CoreASP.NET Core Logging
Redireccionamiento HTTPHTTP Redirection
HttpRedirectionModule
Yes Middleware de reescritura de dirección URLURL Rewriting Middleware
Seguimiento de HTTPHTTP Tracing
TracingModule
Yes
Autenticación de asignaciones de certificados de cliente IISIIS Client Certificate Mapping Authentication
IISCertificateMappingAuthenticationModule
Yes
Restricciones de IP y dominioIP and Domain Restrictions
IpRestrictionModule
Yes
Filtros ISAPIISAPI Filters
IsapiFilterModule
Yes MiddlewareMiddleware
ISAPIISAPI
IsapiModule
Yes MiddlewareMiddleware
Compatibilidad con el protocoloProtocol Support
ProtocolSupportModule
Yes
Filtrado de solicitudesRequest Filtering
RequestFilteringModule
Yes Middleware de reescritura de dirección URLIRuleURL Rewriting Middleware IRule
Supervisor de solicitudesRequest Monitor
RequestMonitorModule
Yes
Reescritura de dirección URLURL Rewriting
RewriteModule
Yes Middleware de reescritura de dirección URLURL Rewriting Middleware
Inclusiones del lado servidorServer-Side Includes
ServerSideIncludeModule
NoNo
Compresión estáticaStatic Compression
StaticCompressionModule
NoNo Middleware de compresión de respuestasResponse Compression Middleware
Contenido estáticoStatic Content
StaticFileModule
NoNo Middleware de archivos estáticosStatic File Middleware
Almacenamiento en caché de tokens.Token Caching
TokenCacheModule
Yes
Almacenamiento en caché de URIURI Caching
UriCacheModule
Yes
Autorización de URLURL Authorization
UrlAuthorizationModule
Yes Identidad de ASP.NET CoreASP.NET Core Identity
Autenticación de WindowsWindows Authentication
WindowsAuthenticationModule
Yes

†Los tipos de coincidencia isFile y isDirectory del módulo de reescritura de direcciones URL no funcionan con las aplicaciones ASP.NET Core debido a los cambios en la estructura de directorios.†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.

Módulos administradosManaged modules

Los módulos administrados no son funcionales cuando la versión de CLR de .NET del grupo de aplicaciones se establece en No Managed Code (Sin código administrado).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. ASP.NET Core ofrece alternativas de middleware en varios casos.ASP.NET Core offers middleware alternatives in several cases.

ModuleModule Opción de ASP.NET CoreASP.NET Core Option
AnonymousIdentificationAnonymousIdentification
DefaultAuthenticationDefaultAuthentication
FileAuthorizationFileAuthorization
FormsAuthenticationFormsAuthentication Middleware de autenticación de cookiesCookie Authentication Middleware
OutputCacheOutputCache Middleware de almacenamiento en caché de respuestasResponse Caching Middleware
PerfilProfile
RoleManagerRoleManager
ScriptModule 4.0ScriptModule-4.0
SesiónSession Middleware de sesiónSession Middleware
UrlAuthorizationUrlAuthorization
UrlMappingsModuleUrlMappingsModule Middleware de reescritura de dirección URLURL Rewriting Middleware
UrlRoutingModule 4.0UrlRoutingModule-4.0 ASP.NET Core IdentityASP.NET Core Identity
WindowsAuthenticationWindowsAuthentication

Cambios en la aplicación del Administrador de IISIIS Manager application changes

Al usar el Administrador de IIS para realizar la configuración, cambia el archivo web.config de la aplicación.When using IIS Manager to configure settings, the web.config file of the app is changed. Si implementa una aplicación e incluye web.config, los cambios realizados con el Administrador de IIS se sobrescriben con el archivo web.config implementado.If deploying an app and including web.config, any changes made with IIS Manager are overwritten by the deployed web.config file. Si se realizan cambios en el archivo web.config del servidor, copie el archivo web.config actualizado en el servidor en el proyecto local inmediatamente.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.

Deshabilitación de los módulos de IISDisabling IIS modules

Si un módulo de IIS configurado en el nivel de servidor debe deshabilitarse en una aplicación, la adición del archivo web.config de la aplicación puede deshabilitar el módulo.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. Puede dejar el módulo en su sitio y desactivarlo mediante un valor de configuración (si está disponible), o quitar el módulo de la aplicación.Either leave the module in place and deactivate it using a configuration setting (if available) or remove the module from the app.

Desactivación de módulosModule deactivation

Muchos módulos ofrecen un valor de configuración que les permite deshabilitarse sin quitar el módulo de la aplicación.Many modules offer a configuration setting that allows them to be disabled without removing the module from the app. Esta es la manera más sencilla y rápida de desactivar un módulo.This is the simplest and quickest way to deactivate a module. Por ejemplo, el módulo de redireccionamiento de HTTP se puede deshabilitar con el elemento <httpRedirect> en 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>

Para más información sobre la deshabilitación de los módulos con valores de configuración, siga los vínculos de la sección sobre elementos secundarios de IIS <system.webServer>.For more information on disabling modules with configuration settings, follow the links in the Child Elements section of IIS <system.webServer>.

Eliminación de módulosModule removal

Si opta por quitar un módulo con un valor de configuración en web.config, desbloquee primero el módulo y la sección <modules> de 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. Desbloquee el módulo en el nivel de servidor.Unlock the module at the server level. Seleccione el servidor de IIS en la barra lateral Conexiones del Administrador de IIS.Select the IIS server in the IIS Manager Connections sidebar. Abra Módulos en el área IIS.Open the Modules in the IIS area. Seleccione el módulo de la lista.Select the module in the list. En la barra lateral Acciones e la derecha, seleccione Desbloquear.In the Actions sidebar on the right, select Unlock. Si la entrada de acción para el módulo aparece como Bloqueo, el módulo ya está desbloqueado y no se requiere ninguna acción.If the action entry for the module appears as Lock, the module is already unlocked, and no action is required. Desbloquee tantos módulos como quiera quitar de web.config más tarde.Unlock as many modules as you plan to remove from web.config later.

  2. Implemente la aplicación sin una sección <modules> en web.config. Si una aplicación se implementa con un archivo web.config que contiene la sección <modules> sin haber desbloqueado primero la sección en el Administrador de IIS, Configuration Manager produce una excepción al intentar desbloquear la sección.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. Por lo tanto, implemente la aplicación sin una sección <modules>.Therefore, deploy the app without a <modules> section.

  3. Desbloquee la sección <modules> de web.config. En la barra lateral Conexiones, seleccione el sitio web en Sitios.Unlock the <modules> section of web.config. In the Connections sidebar, select the website in Sites. En el área Administración, abra el error de configuración.In the Management area, open the Configuration Editor. Use los controles de navegación para seleccionar la sección system.webServer/modules.Use the navigation controls to select the system.webServer/modules section. En la barra lateral Acciones de la derecha, seleccione Desbloquear la sección.In the Actions sidebar on the right, select to Unlock the section. Si la entrada de acción para la sección del módulo aparece como Sección de bloqueo, la sección del módulo ya está desbloqueada y no se requiere ninguna acción.If the action entry for the module section appears as Lock Section, the module section is already unlocked, and no action is required.

  4. Agregue una sección <modules> al archivo local web.config de la aplicación con un elemento <remove> para quitar el módulo de la aplicación.Add a <modules> section to the app's local web.config file with a <remove> element to remove the module from the app. Agregue varios elementos <remove> para quitar varios módulos.Add multiple <remove> elements to remove multiple modules. Si se realizan cambios en web.config en el servidor, realice inmediatamente los mismos cambios en el archivo web.config el proyecto de forma local.If web.config changes are made on the server, immediately make the same changes to the project's web.config file locally. Quitar un módulo según este enfoque no afecta al uso del módulo con otras aplicaciones del servidor.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>
    

Para agregar o quitar módulos para IIS Express mediante web.config, modifique applicationHost.config para desbloquear la sección <modules>:In order to add or remove modules for IIS Express using web.config, modify applicationHost.config to unlock the <modules> section:

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

  2. Localice el elemento <section> para los módulos de IIS y cambie overrideModeDefault de 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. Localice la sección <location path="" overrideMode="Allow"><system.webServer><modules>.Locate the <location path="" overrideMode="Allow"><system.webServer><modules> section. Para los módulos que desee quitar, establezca lockItem entre true y false.For any modules that you wish to remove, set lockItem from true to false. En el ejemplo siguiente, se desbloquea el módulo CGI:In the following example, the CGI Module is unlocked:

    <add name="CgiModule" lockItem="false" />
    
  4. Una vez la sección <modules> y los módulos individuales se desbloquean, tiene la opción de agregar o quitar los módulos de IIS mediante el archivo web.config de la aplicación para ejecutar la aplicación en 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 módulo de IIS también se puede quitar con Appcmd.exe.An IIS module can also be removed with Appcmd.exe. Proporcione MODULE_NAME y APPLICATION_NAME en el comando:Provide the MODULE_NAME and APPLICATION_NAME in the command:

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

Por ejemplo, quite DynamicCompressionModule del sitio web predeterminado:For example, remove the DynamicCompressionModule from the Default Web Site:

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

Configuración mínima del móduloMinimum module configuration

Los únicos módulos necesarios para ejecutar una aplicación ASP.NET Core son el Módulo de autenticación anónima y el Módulo 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.

El Módulo de almacenamiento en caché de URI (UriCacheModule) permite a IIS almacenar en caché la configuración del sitio web en el nivel de dirección URL.The URI Caching Module (UriCacheModule) allows IIS to cache website configuration at the URL level. Sin este módulo, IIS debe leer y analizar la configuración en cada solicitud, incluso cuando se solicita de forma repetida la misma dirección URL.Without this module, IIS must read and parse configuration on every request, even when the same URL is repeatedly requested. Como consecuencia de ello, el rendimiento se reduce considerablemente.Parsing the configuration every request results in a significant performance penalty. Aunque el Módulo de almacenamiento en caché de URI no es estrictamente necesario para ejecutar una aplicación ASP.NET Core hospedada, es recomendable habilitarlo en todas las implementaciones de 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.

El Módulo de almacenamiento en caché de HTTP (HttpCacheModule) implementa la caché de resultados de IIS y también la lógica de almacenamiento en caché de los elementos de la caché de HTTP.sys.The HTTP Caching Module (HttpCacheModule) implements the IIS output cache and also the logic for caching items in the HTTP.sys cache. Sin este módulo, el contenido ya no se almacena en caché en modo kernel y los perfiles de caché se pasan por alto.Without this module, content is no longer cached in kernel mode, and cache profiles are ignored. Quitar el Módulo de almacenamiento en caché de HTTP normalmente tiene efectos negativos sobre el rendimiento y el uso de los recursos.Removing the HTTP Caching Module usually has adverse effects on performance and resource usage. Aunque el Módulo de almacenamiento en caché de HTTP no es estrictamente necesario para ejecutar una aplicación ASP.NET Core hospedada, es recomendable habilitarlo en todas las implementaciones de 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.

Recursos adicionalesAdditional resources