Questa è la mia comprensione di come si è evoluto l'avvio / l'hosting di un'applicazione Web in quanto è abbastanza confuso da seguire. Un piccolo riassunto:
1. ASP.NET classico: scrivere solo il codice dell'applicazione da eseguire nell'ultimo passaggio della pipeline IIS obbligatoria
2. ASP.NET con OWIN: configura un server web .NET e scrivi il codice dell'applicazione. Non è più direttamente associato a IIS, quindi non sei più costretto a usarlo.
3. ASP.NET Core: configura sia l'host che il server web per utilizzare e scrivere il codice dell'applicazione. Non è più obbligatorio utilizzare un server Web .NET se si sceglie come destinazione .NET Core anziché .NET Framework completo.
Ora andrò un po 'più in dettaglio su come funziona e quali classi vengono utilizzate per avviare l'applicazione:
ASP.NET classico
Le applicazioni ASP.NET classiche hanno il Global.asax
file come punto di ingresso. Queste applicazioni possono essere eseguite solo in IIS e il codice viene eseguito alla fine della pipeline IIS (quindi IIS è responsabile per CORS, autenticazione ... prima ancora che il codice venga eseguito). Da IIS 7 è possibile eseguire l'applicazione in modalità integrata che integra il runtime ASP.NET in IIS. Ciò consente al codice di configurare funzionalità che prima non era possibile (o solo in IIS stesso) come la riscrittura degli URL in Application_Start
caso di Global.asax
file o di utilizzare la nuova <system.webserver>
sezione del web.config
file.
ASP.NET con OWIN
Innanzitutto OWIN non è una libreria ma una specifica di come i server Web .NET (ad esempio IIS) interagiscono con le applicazioni Web. Microsoft stessa ha un'implementazione di OWIN chiamata project Katana (distribuita attraverso diversi pacchetti NuGet). Questa implementazione fornisce l' IAppBuilder
interfaccia che incontri in una Startup
classe e alcuni componenti middleware OWIN (OMC) forniti da Microsoft. utilizzandoIAppBuilder
fondamentalmente componi il middleware in un modo plug-and-play per creare la pipeline per il server web (oltre alla sola pipeline ASP.NET in IIS7 + come nel punto sopra) invece di essere legata alla pipeline IIS (ma ora usi un componente middleware per CORS, un componente middleware per l'autenticazione ...). Per questo motivo, l'applicazione non è più specificamente associata a IIS ed è possibile eseguirla su qualsiasi server Web .NET, ad esempio:
- Il pacchetto OwinHost può essere utilizzato per ospitare autonomamente l'applicazione con un server web Katana.
- Il pacchetto Microsoft.Owin.Host.SystemWeb viene utilizzato per ospitare l'applicazione OWIN in IIS7 + in modalità integrata, sottoscrivendo il middleware per gli eventi di durata corretti internamente.
La cosa che rende tutto così confuso è che Global.asax
è ancora supportato insieme alla Startup
classe OWIN , mentre entrambi possono fare cose simili. Ad esempio, è possibile implementare CORS in Global.asax
e autenticazione utilizzando il middleware OWIN che diventa davvero confuso.
La mia regola pratica è quella di rimuovere il Global.asax
file completamente a favore dell'uso Startup
ogni volta che devo aggiungere OWIN.
ASP.NET Core
ASP.NET Core è la prossima evoluzione e ora puoi scegliere come target .NET Core o .NET Framework completo. Quando si utilizza .NET Core, è possibile eseguire l'applicazione su qualsiasi host che supporti .NET Standard. Questo significa che non sei più limitato a un server web .NET (come nel punto precedente), ma puoi ospitare la tua applicazione in contenitori Docker, un server web Linux, IIS ...
Il punto di ingresso per un'applicazione Web ASP.NET Core è il Program.cs
file. Lì si configura l'host e si specifica nuovamente la Startup
classe in cui si configura la pipeline. L'uso di OWIN (usando il IAppBuilder.UseOwin
metodo di estensione) è facoltativo, ma completamente supportato .
AreaRegistration.RegisterAllAreas();
Ho causato un errore per me in quanto questo metodo non può essere utilizzato durante l'avvio in questo modo, solo inApplication_Start
. Tuttavia, la mia applicazione è un'API e questo metodo è apparentemente utile solo per le applicazioni MVC: stackoverflow.com/questions/18404637/…