C'est ma compréhension de la façon dont le démarrage / l'hébergement d'une application Web a évolué, car c'est assez déroutant à suivre. Un petit résumé:
1. ASP.NET classique: n'écrivez que le code d'application à exécuter à la dernière étape du pipeline IIS obligatoire
2. ASP.NET avec OWIN: configurez un serveur Web .NET et écrivez votre code d'application. N'est plus directement couplé à IIS, vous n'êtes donc plus obligé de l'utiliser.
3. ASP.NET Core: configurez l'hôte et le serveur Web pour utiliser et écrire le code de votre application. Il n'est plus obligatoire d'utiliser un serveur Web .NET si vous ciblez .NET Core au lieu du .NET Framework complet.
Je vais maintenant aller un peu plus en détail sur son fonctionnement et sur les classes utilisées pour démarrer l'application:
ASP.NET classique
Les applications ASP.NET classiques ont le Global.asax
fichier comme point d'entrée. Ces applications ne peuvent être exécutées que dans IIS et votre code est exécuté à la fin du pipeline IIS (donc IIS est responsable de CORS, de l'authentification ... avant même que votre code ne s'exécute). Depuis IIS 7, vous pouvez exécuter votre application en mode intégré qui intègre le runtime ASP.NET dans IIS. Cela permet à votre code de configurer des fonctionnalités qui n'étaient pas possibles auparavant (ou uniquement dans IIS lui-même) telles que la réécriture d'URL en Application_Start
cas de votre Global.asax
fichier ou d'utiliser la nouvelle <system.webserver>
section de votre web.config
fichier.
ASP.NET avec OWIN
Tout d'abord, OWIN n'est pas une bibliothèque mais une spécification de la façon dont les serveurs Web .NET (par exemple IIS) interagissent avec les applications Web. Microsoft a lui-même une implémentation de OWIN appelée projet Katana (distribuée via plusieurs packages NuGet différents). Cette implémentation fournit leIAppBuilder
interface que vous rencontrez dans un queStartup
classe et certains composants middleware OWIN (OMC) fournis par Microsoft. En utilisantIAppBuilder
vous composez essentiellement un middleware de manière plug-and-play pour créer le pipeline pour le serveur Web (en plus uniquement du pipeline ASP.NET dans IIS7 + comme dans le point ci-dessus) au lieu d'être lié au pipeline IIS (mais maintenant vous utilisez un composant middleware pour CORS, un composant middleware pour l'authentification ...). Pour cette raison, votre application n'est plus spécifiquement couplée à IIS et vous pouvez l'exécuter sur n'importe quel serveur Web .NET, par exemple:
- Le package OwinHost peut être utilisé pour auto-héberger votre application avec un serveur Web Katana.
- Le package Microsoft.Owin.Host.SystemWeb est utilisé pour héberger votre application OWIN dans IIS7 + en mode intégré, en abonnant votre middleware aux événements de durée de vie corrects en interne.
Ce qui rend tout si confus, c'est qu'il Global.asax
est toujours pris en charge avec la Startup
classe OWIN , alors qu'ils peuvent tous deux faire des choses similaires. Par exemple, vous pouvez implémenter Global.asax
CORS et l'authentification à l'aide du middleware OWIN, ce qui devient vraiment déroutant.
Ma règle de base est de supprimer le Global.asax
fichier au total en faveur de l'utilisation Startup
chaque fois que j'ai besoin d'ajouter OWIN.
ASP.NET Core
ASP.NET Core est la prochaine évolution et vous pouvez désormais cibler soit .NET Core soit le .NET Framework complet. Lorsque vous ciblez .NET Core, vous pouvez exécuter votre application sur n'importe quel hôte prenant en charge la norme .NET. Cela signifie que vous n'êtes plus limité à un serveur Web .NET (comme au point précédent), mais pouvez héberger votre application dans des conteneurs Docker, un serveur Web Linux, IIS ...
Le point d'entrée pour une application Web ASP.NET Core est le Program.cs
fichier. Là, vous configurez votre hôte et spécifiez à nouveau votre Startup
classe où vous configurez votre pipeline. L'utilisation d'OWIN (en utilisant la IAppBuilder.UseOwin
méthode d'extension) est facultative, mais entièrement prise en charge .
AreaRegistration.RegisterAllAreas();
Causé une erreur pour moi car cette méthode ne peut pas être utilisée lors du démarrage comme celui-ci, uniquement dansApplication_Start
. Cependant, mon application est une API et cette méthode n'est apparemment utile que pour les applications MVC: stackoverflow.com/questions/18404637/…