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 Internetinformationsdiensten verwenden. Sie lernen verschiedene Strategien für die Verwendung von ASP.NET MVC mit IIS 7.0 (klassischer Modus), IIS 6.0 und früheren Versionen von IIS kennen.
Die 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. Dies hängt von der Version der Internetinformationsdienste (IIS) und dem Anforderungsverarbeitungsmodus für Ihre Anwendung ab.
Im Folgenden 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 Betriebssystem Windows Server 2003 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 Vergleich zum 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 bestimmen, welcher Verarbeitungsmodus von einer bestimmten Webanwendung verwendet wird, indem Sie den der Anwendung zugeordneten Anwendungspool ermitteln. 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 so konfiguriert, dass zwei Anwendungspools unterstützt werden: DefaultAppPool und klassischer .NET-AppPool. Wenn DefaultAppPool ausgewählt ist, wird Ihre Anwendung im integrierten Anforderungsverarbeitungsmodus ausgeführt. Wenn Klassischer .NET-AppPool ausgewählt ist, wird Ihre Anwendung im klassischen Anforderungsverarbeitungsmodus ausgeführt.
Abbildung 1: Erkennen des Anforderungsverarbeitungsmodus (Klicken Sie hier, 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 in 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 funktionieren. Wenn die ASP.NET-Anwendung jedoch für die Verwendung des klassischen .NET-AppPools konfiguriert ist und dann weiterliest, haben Sie mehr Arbeit zu erledigen.
Verwenden von 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 Möglichkeiten. 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 so genannte Platzhalterskriptzuordnung zu erstellen. Mit einer Wildcard-Skriptzuordnung 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 Zugriff auf Ihren Webserver haben, können Sie die zweite Option verwenden.
In den folgenden Abschnitten werden die einzelnen Optionen ausführlich untersucht.
Hinzufügen von Erweiterungen zur Routingtabelle
Die einfachste Möglichkeit, ASP.NET Routing mit älteren Versionen von IIS zu verwenden, besteht darin, Die Routingtabelle in der Datei Global.asax zu ändern. Die standardmäßige und unveränderte Datei Global.asax in Listing 1 konfiguriert eine Route mit dem Namen Standardroute.
Auflistung 1 : Global.asax (unverändert)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class GlobalApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
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 senden, erhalten Sie die Fehlerseite in Abbildung 2.
Abbildung 2: Fehler "404 Nicht gefunden" (Klicken Sie hier, 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 erfolgt mithilfe eines Skripts mit dem Namen registermvc.wsf. Es war im ASP.NET MVC 1-Release in C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scriptsenthalten, aber seit ASP.NET 2 wurde dieses Skript in die ASP.NET Futures verschoben.
Beim Ausführen dieses Skripts wird eine neue MVC-Erweiterung bei IIS registriert. Nachdem Sie die MVC-Erweiterung registriert haben, können Sie Ihre Routen in der Datei Global.asax ändern, sodass die Routen die MVC-Erweiterung verwenden.
Die geänderte Datei Global.asax in Listing 2 funktioniert mit älteren Versionen von IIS.
Auflistung 2: Global.asax (mit Erweiterungen geändert)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Wichtig: Denken Sie daran, Ihre ASP.NET MVC-Anwendung erneut zu erstellen, nachdem Sie die Datei Global.asax geändert haben.
Es gibt zwei wichtige Änderungen an der Datei Global.asax in Listing 2. In Global.asax sind jetzt zwei Routen definiert. Das URL-Muster für die Standardroute, die erste Route, sieht jetzt wie folgt aus:
{controller}.mvc/{action}/{id}
Durch das Hinzufügen der MVC-Erweiterung wird der Dateityp geändert, der vom ASP.NET Routingmodul abgefangen wird. Mit dieser Änderung leitet die ASP.NET MVC-Anwendung jetzt Anforderungen wie die folgenden 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. Stellen Sie also sicher, dass alle Ihre Links die Erweiterung .mvc enthalten. Wenn Sie die Html.ActionLink()-Hilfsmethode verwenden, um Ihre Links zu generieren, sollten Sie keine Änderungen vornehmen müssen.
Anstatt das Skript registermvc.wcf zu verwenden, können Sie IIS eine neue Erweiterung hinzufügen, die dem ASP.NET Framework manuell zugeordnet wird. Wenn Sie selbst eine neue Erweiterung hinzufügen, stellen Sie sicher, dass das Kontrollkästchen Mit der Bezeichnung Ü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.
Beispielsweise verwendet die geänderte Datei Global.asax in Listing 3 die Erweiterung .aspx anstelle der Erweiterung .mvc.
Auflistung 3: Global.asax (geändert mit ASPX-Erweiterungen)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}.aspx/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
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 ASPX-Erweiterung verwenden zu können.
Erstellen einer Wildcard-Skriptzuordnung
Wenn Sie die URLs für Ihre ASP.NET MVC-Anwendung nicht ändern möchten und Zugriff auf Ihren Webserver haben, haben Sie eine zusätzliche Option. Sie können eine Wildcard-Skriptzuordnung erstellen, die alle Anforderungen an den Webserver dem ASP.NET-Framework zuordnet. Auf diese Weise können Sie die Standard-ASP.NET MVC-Routingtabelle 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.
So aktivieren Sie eine Wildcard-Skriptzuordnung für IIS 7.0:
- 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 Wildcard Script Map 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 ein 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 Bild in voller Größe anzuzeigen)
Nachdem Sie Wildcard-Skriptzuordnungen 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 aufgrund fehlender Stammroute (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Auflistung 4 : Global.asax (geändert mit Stammroute)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Nachdem Sie eine Wildcard-Skriptzuordnung für IIS 7.0 oder IIS 6.0 aktiviert haben, können Sie Anforderungen senden, die mit der Standardroutentabelle funktionieren, die wie folgt aussieht:
/
/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. Es wurden zwei Methoden zum Abrufen von ASP.NET Routing für die Arbeit mit älteren Versionen von IIS erläutert: Ändern der Standardroutentabelle oder Erstellen einer Wildcardskriptzuordnung.
Die erste Option erfordert, dass 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 besteht darin, dass Sie Ihre URLs nicht ändern müssen. Der Nachteil dieser zweiten Option besteht darin, dass sie sich auf die Leistung Ihrer ASP.NET MVC-Anwendung auswirken kann.