Dies ist mein Verständnis davon, wie sich das Starten / Hosten einer Webanwendung entwickelt hat, da es ziemlich verwirrend ist, dem zu folgen. Eine kleine Zusammenfassung:
1. Klassisches ASP.NET: Schreiben Sie nur den Anwendungscode, der im letzten Schritt der obligatorischen IIS-Pipeline ausgeführt werden soll
2. ASP.NET mit OWIN: Konfigurieren Sie einen .NET-Webserver und schreiben Sie Ihren Anwendungscode. Nicht mehr direkt mit IIS verbunden, sodass Sie nicht mehr gezwungen sind, es zu verwenden.
3. ASP.NET Core: Konfigurieren Sie sowohl den Host als auch den Webserver für die Verwendung und das Schreiben Ihres Anwendungscodes. Die Verwendung eines .NET-Webservers ist nicht mehr obligatorisch, wenn Sie auf .NET Core anstelle des vollständigen .NET Frameworks abzielen.
Jetzt werde ich etwas genauer darauf eingehen, wie es funktioniert und welche Klassen zum Starten der Anwendung verwendet werden:
Klassisches ASP.NET
Klassische ASP.NET-Anwendungen haben die Global.asax
Datei als Einstiegspunkt. Diese Anwendungen können nur in IIS ausgeführt werden und Ihr Code wird am Ende der IIS-Pipeline ausgeführt (daher ist IIS für CORS, Authentifizierung ... verantwortlich, bevor Ihr Code überhaupt ausgeführt wird). Seit IIS 7 können Sie Ihre Anwendung im integrierten Modus ausführen, der die ASP.NET-Laufzeit in IIS integriert. Auf diese Weise kann Ihr Code Funktionen konfigurieren, die zuvor (oder nur in IIS selbst) nicht möglich waren, z. B. das UmschreibenApplication_Start
von URLs im Falle Ihrer Global.asax
Datei oder den neuen <system.webserver>
Abschnitt in Ihrer web.config
Datei verwenden.
ASP.NET mit OWIN
Zunächst einmal ist OWIN keine Bibliothek, sondern eine Spezifikation der Interaktion von .NET-Webservern (z. B. IIS) mit Webanwendungen. Microsoft selbst hat eine Implementierung von OWIN namens Project Katana (verteilt über mehrere verschiedene NuGet-Pakete). Diese Implementierung bietet die IAppBuilder
Schnittstelle, auf die Sie in einer Startup
Klasse stoßen, und einige von Microsoft bereitgestellte OWIN-Middleware-Komponenten (OMC). Verwenden vonIAppBuilder
Möglichkeit, Middleware im Plug-and-Play-Verfahren zu erstellen, um die Pipeline für den Webserver zu erstellen (zusätzlich zu nur der ASP.NET-Pipeline in IIS7 + wie oben beschrieben), anstatt an die IIS-Pipeline gebunden zu sein ( Jetzt verwenden Sie jedoch eine Middleware-Komponente für CORS, eine Middleware-Komponente für die Authentifizierung ...). Aus diesem Grund ist Ihre Anwendung nicht mehr speziell an IIS gekoppelt und kann auf jedem .NET-Webserver ausgeführt werden, zum Beispiel:
- Mit dem OwinHost- Paket können Sie Ihre Anwendung mit einem Katana-Webserver selbst hosten.
- Das Microsoft.Owin.Host.SystemWeb- Paket wird verwendet, um Ihre OWIN-Anwendung in IIS7 + im integrierten Modus zu hosten, indem Sie Ihre Middleware intern für die richtigen lebenslangen Ereignisse abonnieren.
Das, was alles so verwirrend macht, ist, dass Global.asax
es immer noch zusammen mit der OWIN- Startup
Klasse unterstützt wird, während beide ähnliche Dinge tun können. Zum Beispiel könnten Sie CORS in Global.asax
und Authentifizierung mit OWIN-Middleware implementieren, was sehr verwirrend wird.
Meine Faustregel ist, die Global.asax
Datei insgesamt zu entfernen, um sie zu verwenden, Startup
wenn ich OWIN hinzufügen muss.
ASP.NET Core
ASP.NET Core ist die nächste Entwicklung. Jetzt können Sie entweder auf .NET Core oder auf das vollständige .NET Framework abzielen. Wenn Sie auf .NET Core abzielen, können Sie Ihre Anwendung auf jedem Host ausführen, der .NET Standard unterstützt. Dies bedeutet, dass Sie nicht mehr auf einen .NET-Webserver beschränkt sind (wie im vorherigen Punkt), sondern Ihre Anwendung in Docker-Containern, einem Linux-Webserver, IIS ... hosten können.
Der Einstiegspunkt für eine ASP.NET Core-Webanwendung ist die Program.cs
Datei. Dort konfigurieren Sie Ihren Host und geben erneut Ihre Startup
Klasse an, in der Sie Ihre Pipeline konfigurieren. Die Verwendung von OWIN (mithilfe der IAppBuilder.UseOwin
Erweiterungsmethode) ist optional, wird jedoch vollständig unterstützt .
AreaRegistration.RegisterAllAreas();
Verursachte einen Fehler für mich, da diese Methode beim Start so nicht verwendet werden darf, nur inApplication_Start
. Meine Anwendung ist jedoch eine API und diese Methode ist anscheinend nur für MVC-Anwendungen nützlich: stackoverflow.com/questions/18404637/…