Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Microsoft
In diesem Tutorial erfahren Sie, wie Sie ASP.NET MVC und URL-Routing mit verschiedenen Versionen von Internetinformationsdienste verwenden. Sie lernen verschiedene Strategien für die Verwendung ASP.NET MVC mit IIS 7.0 (klassischer Modus), IIS 6.0 und früheren Versionen von IIS kennen.
Das ASP.NET MVC-Frameworks hängt von ASP.NET Routing ab, um Browseranforderungen an Controlleraktionen weiterzuleiten. Um ASP.NET Routing nutzen zu können, müssen Sie möglicherweise zusätzliche Konfigurationsschritte auf Ihrem Webserver ausführen. Alles hängt von der Version von Internetinformationsdienste (IIS) und dem Anforderungsverarbeitungsmodus für Ihre Anwendung ab.
Hier finden Sie eine Zusammenfassung der verschiedenen Versionen von IIS:
- IIS 7.0 (integrierter Modus): Es ist keine spezielle Konfiguration erforderlich, um ASP.NET Routing zu verwenden.
- IIS 7.0 (klassischer Modus): Sie müssen eine spezielle Konfiguration ausführen, um ASP.NET Routing zu verwenden.
- IIS 6.0 oder niedriger: Sie müssen eine spezielle Konfiguration ausführen, um ASP.NET Routing verwenden zu können.
Die neueste Version von IIS ist Version 7.5 (unter Win7). IIS 7 von IIS ist in Windows Server 2008 UND VISTA/SP1 und höher enthalten. Sie können IIS 7.0 auch unter jeder Version des Vista-Betriebssystems mit Ausnahme von Home Basic installieren (siehe https://technet.microsoft.com/library/cc731179%28WS.10%29.aspx).
IIS 7.0 unterstützt zwei Modi für die Verarbeitung von Anforderungen. Sie können den integrierten Modus oder den klassischen Modus verwenden. Sie müssen keine speziellen Konfigurationsschritte ausführen, wenn Sie IIS 7.0 im integrierten Modus verwenden. Sie müssen jedoch zusätzliche Konfigurationen ausführen, wenn Sie IIS 7.0 im klassischen Modus verwenden.
Microsoft Windows Server 2003 enthält IIS 6.0. Sie können IIS 6.0 nicht auf IIS 7.0 aktualisieren, wenn Sie das Windows Server 2003-Betriebssystem verwenden. Sie müssen zusätzliche Konfigurationsschritte ausführen, wenn Sie IIS 6.0 verwenden.
Microsoft Windows XP Professional enthält IIS 5.1. Sie müssen zusätzliche Konfigurationsschritte ausführen, wenn Sie IIS 5.1 verwenden.
Schließlich enthält Microsoft Windows 2000 und Microsoft Windows 2000 Professional IIS 5.0. Sie müssen zusätzliche Konfigurationsschritte ausführen, wenn Sie IIS 5.0 verwenden.
Integrierter im klassischen Modus
IIS 7.0 kann Anforderungen mit zwei verschiedenen Anforderungsverarbeitungsmodi verarbeiten: integriert und klassisch. Der integrierte Modus bietet eine bessere Leistung und mehr Features. Der klassische Modus ist aus Gründen der Abwärtskompatibilität mit früheren Versionen von IIS enthalten.
Der Anforderungsverarbeitungsmodus wird vom Anwendungspool bestimmt. Sie können ermitteln, welcher Verarbeitungsmodus von einer bestimmten Webanwendung verwendet wird, indem Sie den der Anwendung zugeordneten Anwendungspool bestimmen. Führen Sie die folgenden Schritte aus:
- Starten des Internetinformationsdienste-Managers
- Wählen Sie im Fenster Verbindungen eine Anwendung aus.
- Klicken Sie im Fenster Aktionen auf den Link Grundlegende Einstellungen , um das Dialogfeld Anwendung bearbeiten zu öffnen (siehe Abbildung 1).
- Notieren Sie sich den ausgewählten Anwendungspool.
Standardmäßig ist IIS für die Unterstützung von zwei Anwendungspools konfiguriert: DefaultAppPool und classic .NET AppPool. Wenn DefaultAppPool ausgewählt ist, wird Ihre Anwendung im integrierten Anforderungsverarbeitungsmodus ausgeführt. Wenn Classic .NET AppPool ausgewählt ist, wird Ihre Anwendung im klassischen Anforderungsverarbeitungsmodus ausgeführt.
Abbildung 1: Erkennen des Anforderungsverarbeitungsmodus(Klicken Sie, um das bild in voller Größe anzuzeigen)
Beachten Sie, dass Sie den Anforderungsverarbeitungsmodus im Dialogfeld Anwendung bearbeiten ändern können. Klicken Sie auf die Schaltfläche Auswählen, und ändern Sie den der Anwendung zugeordneten Anwendungspool. Beachten Sie, dass beim Ändern einer ASP.NET Anwendung vom klassischen in den integrierten Modus Kompatibilitätsprobleme auftreten. Weitere Informationen finden Sie in den folgenden Artikeln:
Upgrade ASP.NET 1.1 auf IIS 7.0 unter Windows Vista und Windows Server 2008 -- https://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/upgrading-aspnet-11-to-iis-on-windows-vista-and-windows-server-2008
ASP.NET Integration mit IIS 7.0 : https://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/aspnet-integration-with-iis
Wenn eine ASP.NET-Anwendung defaultAppPool verwendet, müssen Sie keine zusätzlichen Schritte ausführen, um ASP.NET Routing (und damit ASP.NET MVC) zu erhalten. Wenn die ASP.NET-Anwendung jedoch für die Verwendung des klassischen .NET-AppPools konfiguriert ist, lesen Sie weiter, müssen Sie mehr tun.
Verwenden ASP.NET MVC mit älteren Versionen von IIS
Wenn Sie ASP.NET MVC mit einer älteren Version von IIS als IIS 7.0 oder IIS 7.0 im klassischen Modus verwenden müssen, haben Sie zwei Optionen. Zunächst können Sie die Routingtabelle ändern, um Dateierweiterungen zu verwenden. Anstatt beispielsweise eine URL wie /Store/Details anzufordern, fordern Sie eine URL wie /Store.aspx/Details an.
Die zweite Option besteht darin, eine sogenannte Platzhalterskriptzuordnung zu erstellen. Mit einer Feldhalterskriptzuordnung können Sie jede Anforderung dem ASP.NET-Framework zuordnen.
Wenn Sie keinen Zugriff auf Ihren Webserver haben (z. B. wird Ihre ASP.NET MVC-Anwendung von einem Internetdienstanbieter gehostet), müssen Sie die erste Option verwenden. Wenn Sie die Darstellung Ihrer URLs nicht ändern möchten und Sie Zugriff auf Ihren Webserver haben, können Sie die zweite Option verwenden.
In den folgenden Abschnitten untersuchen wir jede Option ausführlich.
Hinzufügen von Erweiterungen zur Routingtabelle
Die einfachste Möglichkeit, ASP.NET Routing für ältere Versionen von IIS zu verwenden, besteht darin, Ihre Routingtabelle in der Datei Global.asax zu ändern. Die standard- und unveränderte Datei Global.asax in Listing 1 konfiguriert eine Route mit dem Namen Standardroute.
Eintrag 1 : Global.asax (unverändert)
Public Class MvcApplication
Inherits System.Web.HttpApplication
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
End Sub
Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
End Sub
End Class
Mit der in Listing 1 konfigurierten Standardroute können Sie URLs weiterleiten, die wie folgt aussehen:
/Home/Index
/Product/Details/3
/Produkt
Leider übergeben ältere Versionen von IIS diese Anforderungen nicht an das ASP.NET Framework. Daher werden diese Anforderungen nicht an einen Controller weitergeleitet. Wenn Sie beispielsweise eine Browseranforderung für die URL /Home/Index stellen, erhalten Sie die Fehlerseite in Abbildung 2.
Abbildung 2: Empfangen eines Fehlers "404 Nicht gefunden" (Klicken Sie, um das bild in voller Größe anzuzeigen)
Ältere Versionen von IIS ordnen nur bestimmte Anforderungen dem ASP.NET Framework zu. Die Anforderung muss für eine URL mit der richtigen Dateierweiterung sein. Beispielsweise wird eine Anforderung für /SomePage.aspx dem ASP.NET Framework zugeordnet. Eine Anforderung für /SomePage.htm ist jedoch nicht der Fall.
Damit ASP.NET Routing funktioniert, müssen wir daher die Standardroute so ändern, dass sie eine Dateierweiterung enthält, die dem ASP.NET Framework zugeordnet ist.
Dies geschieht mithilfe eines Skripts mit dem Namen registermvc.wsf
. Es war in der ASP.NET MVC 1-Version in C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scripts
enthalten, aber seit ASP.NET 2 wurde dieses Skript in die ASP.NET Futures verschoben.
Durch ausführen dieses Skripts wird eine neue MVC-Erweiterung bei IIS registriert. Nachdem Sie die Erweiterung .mvc registriert haben, können Sie Ihre Routen in der Datei Global.asax ändern, sodass die Routen die Erweiterung .mvc verwenden.
Die geänderte Datei Global.asax in Listing 2 funktioniert mit älteren Versionen von IIS.
Listing 2 – Global.asax (mit Erweiterungen geändert)
Public Class MvcApplication
Inherits System.Web.HttpApplication
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}.mvc/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
routes.MapRoute( _
"Root", _
"", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
End Sub
Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
End Sub
End Class
Wichtig: Denken Sie daran, Ihre ASP.NET MVC-Anwendung nach dem Ändern der Datei Global.asax erneut zu erstellen.
Es gibt zwei wichtige Änderungen an der Datei Global.asax in Listing 2. Es sind jetzt zwei Routen in Global.asax definiert. Das URL-Muster für die Standardroute, die erste Route, sieht nun wie folgt aus:
{controller}.mvc/{action}/{id}
Durch das Hinzufügen der Erweiterung .mvc wird der Dateityp geändert, den das ASP.NET Routingmodul abfängt. Mit dieser Änderung leitet die ASP.NET MVC-Anwendung anforderungen jetzt wie folgt weiter:
/Home.mvc/Index/
/Product.mvc/Details/3
/Product.mvc/
Die zweite Route, die Stammroute, ist neu. Dieses URL-Muster für die Stammroute ist eine leere Zeichenfolge. Diese Route ist für den Abgleich von Anforderungen erforderlich, die an den Stamm Ihrer Anwendung gesendet werden. Die Stammroute entspricht beispielsweise einer Anforderung, die wie folgt aussieht:
http://www.YourApplication.com/
Nachdem Sie diese Änderungen an Ihrer Routingtabelle vorgenommen haben, müssen Sie sicherstellen, dass alle Links in Ihrer Anwendung mit diesen neuen URL-Mustern kompatibel sind. Mit anderen Worten: Stellen Sie sicher, dass alle Ihre Links die Erweiterung .mvc enthalten. Wenn Sie die Html.ActionLink()-Hilfsmethode verwenden, um Ihre Links zu generieren, müssen Sie keine Änderungen vornehmen.
Anstatt das Skript registermvc.wcf zu verwenden, können Sie IIS eine neue Erweiterung hinzufügen, die dem ASP.NET Framework manuell zugeordnet ist. Wenn Sie selbst eine neue Erweiterung hinzufügen, stellen Sie sicher, dass das Kontrollkästchen Überprüfen, ob die Datei vorhanden ist nicht aktiviert ist.
Gehosteter Server
Sie haben nicht immer Zugriff auf Ihren Webserver. Wenn Sie beispielsweise Ihre ASP.NET MVC-Anwendung mit einem Internethostinganbieter hosten, haben Sie nicht unbedingt Zugriff auf IIS.
In diesem Fall sollten Sie eine der vorhandenen Dateierweiterungen verwenden, die dem ASP.NET Framework zugeordnet sind. Beispiele für Dateierweiterungen, die ASP.NET zugeordnet sind, sind die Erweiterungen ASPX, AXD und ASHX.
Die geänderte Datei Global.asax in Listing 3 verwendet beispielsweise die Erweiterung ASPX anstelle der Erweiterung .mvc.
Eintrag 3: Global.asax (geändert mit ASPX-Erweiterungen)
Public Class MvcApplication
Inherits System.Web.HttpApplication
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}.aspx/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
routes.MapRoute( _
"Root", _
"", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
End Sub
Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
End Sub
End Class
Die Datei Global.asax in Listing 3 ist genau identisch mit der vorherigen Global.asax-Datei, mit ausnahme der Tatsache, dass sie die Erweiterung .aspx anstelle der Erweiterung .mvc verwendet. Sie müssen kein Setup auf Ihrem Remotewebserver durchführen, um die ERWEITERUNG ASPX zu verwenden.
Erstellen einer Wildcard-Skriptzuordnung
Wenn Sie die URLs für Ihre ASP.NET MVC-Anwendung nicht ändern möchten und Sie Zugriff auf Ihren Webserver haben, haben Sie eine zusätzliche Option. Sie können eine Feldhalterskriptzuordnung erstellen, die alle Anforderungen an den Webserver dem ASP.NET Framework zuordnet. Auf diese Weise können Sie die Standardroutentabelle ASP.NET MVC mit IIS 7.0 (im klassischen Modus) oder IIS 6.0 verwenden.
Beachten Sie, dass diese Option dazu führt, dass IIS jede Anforderung abfängt, die an den Webserver gestellt wird. Dies schließt Anforderungen für Bilder, klassische ASP-Seiten und HTML-Seiten ein. Daher hat das Aktivieren einer Wildcard-Skriptzuordnung zu ASP.NET Auswirkungen auf die Leistung.
Hier erfahren Sie, wie Sie eine Wildcard-Skriptzuordnung für IIS 7.0 aktivieren:
- Wählen Sie Ihre Anwendung im Fenster Verbindungen aus.
- Stellen Sie sicher, dass die Ansicht Features ausgewählt ist.
- Doppelklicken Sie auf die Schaltfläche Handlerzuordnungen
- Klicken Sie auf den Link Feldhalterskriptzuordnung hinzufügen (siehe Abbildung 3).
- Geben Sie den Pfad zur aspnet_isapi.dll-Datei ein (Sie können diesen Pfad aus der PageHandlerFactory-Skriptzuordnung kopieren).
- Geben Sie den Namen MVC ein.
- Klicken Sie auf die Schaltfläche OK .
Abbildung 3: Erstellen einer Wildcard-Skriptzuordnung mit IIS 7.0(Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Führen Sie die folgenden Schritte aus, um eine Wildcard-Skriptzuordnung mit IIS 6.0 zu erstellen:
- Klicken Sie mit der rechten Maustaste auf eine Website, und wählen Sie Eigenschaften aus.
- Wählen Sie die Registerkarte Startverzeichnis aus.
- Klicken Sie auf die Schaltfläche Konfiguration .
- Wählen Sie die Registerkarte Zuordnungen aus.
- Klicken Sie auf die Schaltfläche Einfügen (siehe Abbildung 4).
- Fügen Sie den Pfad zum aspnet_isapi.dll in das Feld Ausführbare Datei ein (Sie können diesen Pfad aus der Skriptzuordnung für ASPX-Dateien kopieren).
- Deaktivieren Sie das Kontrollkästchen Mit der Bezeichnung Überprüfen, ob die Datei vorhanden ist.
- Klicken Sie auf die Schaltfläche OK .
Abbildung 4: Erstellen einer Wildcard-Skriptzuordnung mit IIS 6.0(Klicken Sie hier, um ein vollständiges Bild anzuzeigen)
Nachdem Sie Die Feldhalterskriptzuordnungen aktiviert haben, müssen Sie die Routingtabelle in der Datei Global.asax so ändern, dass sie eine Stammroute enthält. Andernfalls erhalten Sie die Fehlerseite in Abbildung 5, wenn Sie eine Anforderung für die Stammseite Ihrer Anwendung stellen. Sie können die geänderte Datei Global.asax in Listing 4 verwenden.
Abbildung 5: Fehler bei fehlender Stammroute(Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Listing 4 – Global.asax (geändert mit Stammroute)
Public Class MvcApplication
Inherits System.Web.HttpApplication
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
routes.MapRoute( _
"Root", _
"", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
End Sub
Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
End Sub
End Class
Nachdem Sie eine Feldhalterskriptzuordnung für IIS 7.0 oder IIS 6.0 aktiviert haben, können Sie Anforderungen stellen, die mit der Standardroutentabelle funktionieren, die wie folgt aussehen:
/
/Home/Index
/Product/Details/3
/Produkt
Zusammenfassung
In diesem Tutorial wurde erläutert, wie Sie ASP.NET MVC verwenden können, wenn Sie eine ältere Version von IIS (oder IIS 7.0 im klassischen Modus) verwenden. Wir haben zwei Methoden zum Abrufen von ASP.NET Routing für ältere Versionen von IIS erläutert: Ändern Sie die Standardroutentabelle oder erstellen Sie eine Feldhalterskriptzuordnung.
Bei der ersten Option müssen Sie die URLs ändern, die in Ihrer ASP.NET MVC-Anwendung verwendet werden. Ein sehr wichtiger Vorteil dieser ersten Option ist, dass Sie keinen Zugriff auf einen Webserver benötigen, um die Routingtabelle zu ändern. Das bedeutet, dass Sie diese erste Option auch beim Hosten Ihrer ASP.NET MVC-Anwendung mit einem Internethostingunternehmen verwenden können.
Die zweite Option besteht darin, eine Platzhalterskriptzuordnung zu erstellen. Der Vorteil dieser zweiten Option ist, dass Sie Ihre URLs nicht ändern müssen. Der Nachteil dieser zweiten Option ist, dass sie sich auf die Leistung Ihrer ASP.NET MVC-Anwendung auswirken kann.