IIS-Module mit ASP.NET Core
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der .NET- und .NET Core-Supportrichtlinie. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Einige der nativen IIS-Module und sämtliche der IIS-verwalteten Module sind nicht in der Lage, Anforderungen für ASP.NET Core-Apps zu verarbeiten. In vielen Fällen bietet ASP.NET Core eine Alternative zu den Szenarien, die von nativen und verwalteten IIS-Modulen abgedeckt werden.
Native Module
Die Tabelle enthält native IIS-Module, die mit ASP.NET Core-Apps und dem ASP.NET Core-Modul funktionieren.
Modul | Funktionsfähig mit ASP.NET Core-Apps | ASP.NET Core-Option |
---|---|---|
Anonyme AuthentifizierungAnonymousAuthenticationModule |
Ja | |
StandardauthentifizierungBasicAuthenticationModule |
Ja | |
Authentifizierung durch ClientzertifikatszuordnungCertificateMappingAuthenticationModule |
Ja | |
CGICgiModule |
Nein | |
KonfigurationsvalidierungConfigurationValidationModule |
Ja | |
HTTP-FehlerCustomErrorModule |
Nein | Middleware für Statuscodeseiten |
Benutzerdefinierte ProtokollierungCustomLoggingModule |
Ja | |
StandarddokumentDefaultDocumentModule |
Nein | Middleware für Standarddateien |
HashwertauthentifizierungDigestAuthenticationModule |
Ja | |
VerzeichnissucheDirectoryListingModule |
Nein | Middleware für Verzeichnissuche |
Dynamische KomprimierungDynamicCompressionModule |
Ja | Antworten komprimierende Middleware |
Ablaufverfolgung für AnforderungsfehlerFailedRequestsTracingModule |
Ja | ASP.NET Core-Protokollierung |
DateizwischenspeicherungFileCacheModule |
Nein | Antworten zwischenspeichernde Middleware |
HTTP-ZwischenspeicherungHttpCacheModule |
Nein | Antworten zwischenspeichernde Middleware |
HTTP-ProtokollierungHttpLoggingModule |
Ja | ASP.NET Core-Protokollierung |
HTTP-UmleitungHttpRedirectionModule |
Ja | URL-umschreibende Middleware |
HTTP-AblaufverfolgungTracingModule |
Ja | |
Authentifizierung durch IIS-ClientzertifikatszuordnungIISCertificateMappingAuthenticationModule |
Ja | |
IP- und DomäneneinschränkungenIpRestrictionModule |
Ja | |
ISAPI-FilterIsapiFilterModule |
Ja | Middleware |
ISAPIIsapiModule |
Ja | Middleware |
ProtokollunterstützungProtocolSupportModule |
Ja | |
AnforderungsfilterungRequestFilteringModule |
Ja | URL-umschreibende MiddlewareIRule |
AnforderungsüberwachungRequestMonitorModule |
Ja | |
Umschreiben von URLs†RewriteModule |
Ja | URL-umschreibende Middleware |
Serverseitige IncludedateienServerSideIncludeModule |
Nein | |
Statische KomprimierungStaticCompressionModule |
Nein | Antworten komprimierende Middleware |
Statischer InhaltStaticFileModule |
Nein | Middleware für statische Dateien |
Token-ZwischenspeicherungTokenCacheModule |
Ja | |
URI-ZwischenspeicherungUriCacheModule |
Ja | |
URL-AutorisierungUrlAuthorizationModule |
Ja | ASP.NET Core Identity |
WebDavWebDAV |
Nein | |
Windows-AuthentifizierungWindowsAuthenticationModule |
Ja |
†Die Übereinstimmungstypen isFile
und isDirectory
des URL-Rewrite-Moduls können aufgrund der Änderungen in der Verzeichnisstruktur nicht in ASP.NET Core-Apps ausgeführt werden.
Verwaltete Module
Verwaltete Module sind mit gehosteten ASP.NET Core-Apps nicht funktionsfähig, wenn die .NET CLR-Version des App-Pools auf Kein verwalteter Code festgelegt ist. ASP.NET Core bietet in verschiedenen Fällen Alternativen für Middleware an.
Modul | ASP.NET Core-Option |
---|---|
AnonymousIdentification | |
DefaultAuthentication | |
FileAuthorization | |
FormsAuthentication | Middleware für Cookieauthentifizierung |
OutputCache | Antworten zwischenspeichernde Middleware |
Profile | |
RoleManager | |
ScriptModule-4.0 | |
Sitzung | Middleware für Sitzungen |
UrlAuthorization | |
UrlMappingsModule | URL-umschreibende Middleware |
UrlRoutingModule-4.0 | ASP.NET Core Identity |
WindowsAuthentication |
IIS Manager-Anwendungsänderungen
Bei Verwendung von IIS Manager für die Konfiguration von Einstellungen wurde die Datei web.config der App geändert. Wenn eine App bereitgestellt und web.config einbezogen wird, werden sämtliche mit IIS Manager vorgenommene Änderungen von der bereitgestellten Datei web.config überschrieben. Wenn Änderungen an der Datei web.config des Servers vorgenommen werden, kopieren Sie die aktualisierte Datei web.config auf dem Server direkt in das lokale Projekt.
Deaktivieren von IIS-Modulen
Wenn ein IIS-Modul auf Serverebene konfiguriert wird und für eine App deaktiviert werden muss, ist dies durch eine Erweiterung der Datei web.config der App möglich. Lassen Sie das Modul an der Stelle und deaktivieren Sie es mit einer Konfigurationseinstellung (falls verfügbar), oder entfernen Sie das Modul aus der App.
Deaktivierung von Modulen
Viele Module bieten eine Konfigurationseinstellung, mit der sie deaktiviert werden können, ohne aus der App entfernt werden zu müssen. Dies ist der einfachste und schnellste Weg zur Deaktivierung eines Moduls. Das HTTP-Umleitungsmodul kann beispielsweise mit dem <httpRedirect>
-Element in web.config deaktiviert werden:
<configuration>
<system.webServer>
<httpRedirect enabled="false" />
</system.webServer>
</configuration>
Für weitere Informationen zum Deaktivieren von Modulen mit Konfigurationseinstellungen folgen Sie den Links im Abschnitt Untergeordnete Elemente von IIS <system.webServer>.
Entfernen von Modulen
Wenn Sie ein Modul mit einer Einstellung in der Datei web.config entfernen können, entsperren Sie das Modul, und entsperren Sie zunächst den Abschnitt <modules>
in der Datei web.config:
Entsperren Sie das Modul auf Serverebene. Wählen Sie den IIS-Server in der IIS-Manager-Sidebar Verbindungen aus. Öffnen Sie Module im Bereich IIS. Wählen Sie das Modul aus der Liste aus. Wählen Sie in der Sidebar Aktionen auf der rechten Seite die Option Entsperren aus. Wenn der Aktionseintrag für das Modul Lock (Sperren) lautet, wurde das Modul bereits entsperrt, und es ist keine weitere Aktion erforderlich. Entsperren Sie alle Module, die Sie später aus web.config entfernen möchten.
Stellen Sie die App ohne den Abschnitt
<modules>
in der Datei web.config bereit. Wenn eine App bereitgestellt wird, in der die Datei web.config den Abschnitt<modules>
enthält, ohne dass der Abschnitt zuvor in IIS-Manager entsperrt wurde, löst der Configuration Manager bei dem Versuch, den Abschnitt zu entsperren, eine Ausnahme aus. Daher sollten Sie die App ohne einen Abschnitt<modules>
bereitstellen.Entsperren Sie den Abschnitt
<modules>
in der Datei web.config. Wählen Sie in der Sidebar Verbindungen unter Sites die Website aus. Öffnen Sie im Bereich Verwaltung den Konfigurations-Editor. Wählen Sie mithilfe der Navigationssteuerelemente den Abschnittsystem.webServer/modules
aus. Wählen Sie in der Seitenleiste Aktionen auf der rechten Seite die Option Entsperren für den Abschnitt aus. Wenn der Aktionseintrag für den Modulabschnitt Lock Section (Abschnitt sperren) lautet, wurde der Modulabschnitt bereits entsperrt, und es ist keine weitere Aktion erforderlich.Fügen Sie den Abschnitt
<modules>
zur Datei web.config mit dem Element<remove>
hinzu, um das Modul aus der App zu entfernen. Es können mehrere<remove>
-Elemente hinzugefügt werden, um mehrere Module zu entfernen. Wenn auf dem Server Änderungen an der Datei web.config vorgenommen werden, nehmen Sie sofort lokal die gleichen Änderungen an der Datei web.config des Projekts vor. Wenn ein Modul auf diese Weise entfernt wird, hat dies keine Auswirkungen auf die Verwendung des Moduls mit anderen Apps auf dem Server.<configuration> <system.webServer> <modules> <remove name="MODULE_NAME" /> </modules> </system.webServer> </configuration>
Sie können Module für IIS Express mit web.config hinzufügen oder entfernen. Ändern Sie dazu die Datei applicationHost.config, und entsperren Sie den Abschnitt <modules>
:
Öffnen Sie {APPLICATION ROOT}\.vs\config\applicationhost.config.
Machen Sie das Element
<section>
für IIS-Module ausfindig, und ändern SieoverrideModeDefault
vonDeny
inAllow
:<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
Machen Sie den Abschnitt
<location path="" overrideMode="Allow"><system.webServer><modules>
ausfindig. Ändern Sie für alle zu entfernenden ModulelockItem
vontrue
infalse
. Im folgenden Beispiel wird das CGI-Modul entsperrt:<add name="CgiModule" lockItem="false" />
Nachdem der Abschnitt
<modules>
und die einzelnen Module entsperrt wurden, können Sie IIS-Module mit der web.config-Datei der App hinzufügen, um die App in IIS Express auszuführen.
Ein IIS-Modul kann auch mit Appcmd.exe entfernt werden. Geben Sie MODULE_NAME
und APPLICATION_NAME
im Befehl an:
Appcmd.exe delete module MODULE_NAME /app.name:APPLICATION_NAME
Entfernen Sie beispielsweise DynamicCompressionModule
aus „Default Web Site“ (Standardwebsite):
%windir%\system32\inetsrv\appcmd.exe delete module DynamicCompressionModule /app.name:"Default Web Site"
Modulmindestkonfiguration
Die einzigen Module, die für die Ausführung einer ASP.NET Core-App erforderlich sind, sind das anonyme Authentifizierungsmodul und das ASP.NET Core-Modul.
Mit dem URI-Zwischenspeicherungsmodul (UriCacheModule
) kann IIS die Websitekonfiguration auf URL-Ebene zwischenspeichern. Ohne dieses Modul muss IIS die Konfiguration bei der Anforderung lesen und analysieren, selbst dann, wenn wiederholt die gleiche URL angefordert wird. Das Analysieren der Konfiguration bei jeder Anforderung führt zu erheblichen Leistungseinbußen. Auch wenn das URI-Zwischenspeicherungsmodul grundsätzlich nicht für die Ausführung einer gehosteten ASP.NET Core-App erforderlich ist, wird empfohlen, das URI-Zwischenspeicherungsmodul für sämtliche ASP.NET Core-Bereitstellungen zu aktivieren.
Das HTTP-Zwischenspeicherungsmodul (HttpCacheModule
) implementiert den IIS-Ausgabecache und die Logik für das Zwischenspeichern von Elementen im HTTP.sys-Cache. Ohne dieses Modul werden Inhalte nicht mehr im Kernelmodus zwischengespeichert, und Cacheprofile werden ignoriert. Das Entfernen des HTTP-Zwischenspeicherungsmoduls hat in der Regel negative Auswirkungen auf Leistung und Ressourcennutzung. Auch wenn das HTTP-Zwischenspeicherungsmodul grundsätzlich nicht für die Ausführung einer gehosteten ASP.NET Core-App erforderlich ist, wird empfohlen, das HTTP-Zwischenspeicherungsmodul für sämtliche ASP.NET Core-Bereitstellungen zu aktivieren.