Módulos de IIS con ASP.NET Core
Nota:
Esta no es la versión más reciente de este artículo. Para la versión actual, consulte la versión de .NET 9 de este artículo.
Advertencia
Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulte la directiva de compatibilidad de .NET y .NET Core. Para la versión actual, consulte la versión de .NET 9 de este artículo.
Importante
Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.
Para la versión actual, consulte la versión de .NET 9 de este artículo.
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. En muchos casos, ASP.NET Core ofrece una alternativa a los escenarios abordados por los módulos nativos y administrados de IIS.
Módulos nativos
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.
Module | Funcional con aplicaciones ASP.NET Core | Opción de ASP.NET Core |
---|---|---|
Autenticación anónimaAnonymousAuthenticationModule |
Sí | |
Autenticación básicaBasicAuthenticationModule |
Sí | |
Autenticación de asignaciones de certificados de clienteCertificateMappingAuthenticationModule |
Sí | |
CGICgiModule |
No | |
Validación de configuraciónConfigurationValidationModule |
Sí | |
Errores HTTPCustomErrorModule |
No | Middleware de páginas de códigos de estado |
Registro personalizadoCustomLoggingModule |
Sí | |
Documento predeterminadoDefaultDocumentModule |
No | Middleware de archivos predeterminados |
Autenticación implícitaDigestAuthenticationModule |
Sí | |
Examen de directoriosDirectoryListingModule |
No | Middleware de exploración de directorios |
Compresión dinámicaDynamicCompressionModule |
Sí | Middleware de compresión de respuestas |
Seguimiento de solicitudes con errorFailedRequestsTracingModule |
Sí | Registro de ASP.NET Core |
Almacenamiento en caché de archivosFileCacheModule |
No | Middleware de almacenamiento en caché de respuestas |
Almacenamiento en caché HTTPHttpCacheModule |
No | Middleware de almacenamiento en caché de respuestas |
Registro HTTPHttpLoggingModule |
Sí | Registro de ASP.NET Core |
Redireccionamiento HTTPHttpRedirectionModule |
Sí | Middleware de reescritura de dirección URL |
Seguimiento de HTTPTracingModule |
Sí | |
Autenticación de asignaciones de certificados de cliente IISIISCertificateMappingAuthenticationModule |
Sí | |
Restricciones de IP y dominioIpRestrictionModule |
Sí | |
Filtros ISAPIIsapiFilterModule |
Sí | Middleware |
ISAPIIsapiModule |
Sí | Middleware |
Compatibilidad con el protocoloProtocolSupportModule |
Sí | |
Filtrado de solicitudesRequestFilteringModule |
Sí | Middleware de reescritura de dirección URLIRule |
Supervisor de solicitudesRequestMonitorModule |
Sí | |
Reescritura de direcciones URL†RewriteModule |
Sí | Middleware de reescritura de dirección URL |
Inclusiones del lado servidorServerSideIncludeModule |
No | |
Compresión estáticaStaticCompressionModule |
No | Middleware de compresión de respuestas |
Contenido estáticoStaticFileModule |
No | Middleware de archivos estáticos |
Almacenamiento en caché de tokens.TokenCacheModule |
Sí | |
Almacenamiento en caché de URIUriCacheModule |
Sí | |
Autorización de URLUrlAuthorizationModule |
Sí | ASP.NET Core Identity |
WebDavWebDAV |
No | |
Autenticación de WindowsWindowsAuthenticationModule |
Sí |
†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.
Módulos administrados
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). ASP.NET Core ofrece alternativas de middleware en varios casos.
Module | Opción de ASP.NET Core |
---|---|
AnonymousIdentification | |
DefaultAuthentication | |
FileAuthorization | |
FormsAuthentication | Middleware de autenticación de Cookies |
OutputCache | Middleware de almacenamiento en caché de respuestas |
Perfil | |
RoleManager | |
ScriptModule 4.0 | |
Sesión | Middleware de sesión |
UrlAuthorization | |
UrlMappingsModule | Middleware de reescritura de dirección URL |
UrlRoutingModule 4.0 | ASP.NET Core Identity |
WindowsAuthentication |
Cambios en la aplicación del Administrador de IIS
Al usar el Administrador de IIS para realizar la configuración, cambia el archivo web.config de la aplicación. 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. 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.
Deshabilitación de los módulos de IIS
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. 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.
Desactivación de módulos
Muchos módulos ofrecen un valor de configuración que les permite deshabilitarse sin quitar el módulo de la aplicación. Esta es la manera más sencilla y rápida de desactivar un módulo. Por ejemplo, el módulo de redireccionamiento de HTTP se puede deshabilitar con el elemento <httpRedirect>
en 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>.
Eliminación de módulos
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:
Desbloquee el módulo en el nivel de servidor. Seleccione el servidor de IIS en la barra lateral Conexiones del Administrador de IIS. Abra Módulos en el área IIS. Seleccione el módulo de la lista. En la barra lateral Acciones e la derecha, seleccione Desbloquear. 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. Desbloquee tantos módulos como quiera quitar de web.config más tarde.
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. Por lo tanto, implemente la aplicación sin una sección<modules>
.Desbloquee la sección
<modules>
de web.config. En la barra lateral Conexiones, seleccione el sitio web en Sitios. En el área Administración, abra el error de configuración. Use los controles de navegación para seleccionar la secciónsystem.webServer/modules
. En la barra lateral Acciones de la derecha, seleccione Desbloquear la sección. 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.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. Agregue varios elementos<remove>
para quitar varios módulos. 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. Quitar un módulo según este enfoque no afecta al uso del módulo con otras aplicaciones del servidor.<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>
:
Abra {APPLICATION ROOT}\.vs\config\applicationhost.config.
Localice el elemento
<section>
para los módulos de IIS y cambieoverrideModeDefault
deDeny
aAllow
:<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
Localice la sección
<location path="" overrideMode="Allow"><system.webServer><modules>
. Para los módulos que desee quitar, establezcalockItem
entretrue
yfalse
. En el ejemplo siguiente, se desbloquea el módulo CGI:<add name="CgiModule" lockItem="false" />
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.
Un módulo de IIS también se puede quitar con Appcmd.exe. Proporcione MODULE_NAME
y APPLICATION_NAME
en el comando:
Appcmd.exe delete module MODULE_NAME /app.name:APPLICATION_NAME
Por ejemplo, quite DynamicCompressionModule
del sitio web predeterminado:
%windir%\system32\inetsrv\appcmd.exe delete module DynamicCompressionModule /app.name:"Default Web Site"
Configuración mínima del módulo
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.
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. 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. Como consecuencia de ello, el rendimiento se reduce considerablemente. 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.
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. Sin este módulo, el contenido ya no se almacena en caché en modo kernel y los perfiles de caché se pasan por alto. Quitar el Módulo de almacenamiento en caché de HTTP normalmente tiene efectos negativos sobre el rendimiento y el uso de los recursos. 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.
Recursos adicionales
- Introduction to IIS Architectures: Modules in IIS (Introducción a las arquitecturas de IIS: módulos de IIS)
- IIS Modules Overview (Introducción a los módulos de IIS)
- Customizing IIS 7.0 Roles and Modules (Personalización de los roles y módulos de IIS 7.0)
- IIS <system.webServer>