Rilevamento della classe di avvio OWIN
Questa esercitazione illustra come configurare la classe di avvio OWIN caricata. Per altre informazioni su OWIN, vedere Panoramica di Project Katana. Questa esercitazione è stata scritta da Rick Anderson ( @RickAndMSFT ), Praburaj Thiajan e Howard Dierking ( @howard_dierking ).
Prerequisiti
Rilevamento della classe di avvio OWIN
Ogni applicazione OWIN ha una classe di avvio in cui si specificano i componenti per la pipeline dell'applicazione. Esistono diversi modi per connettere la classe di avvio al runtime, a seconda del modello di hosting scelto (OwinHost, IIS e IIS-Express). La classe di avvio illustrata in questa esercitazione può essere usata in ogni applicazione di hosting. La classe di avvio viene connettita al runtime di hosting usando uno degli approcci seguenti:
Convenzione di denominazione: Katana cerca una classe denominata
Startup
nello spazio dei nomi corrispondente al nome dell'assembly o allo spazio dei nomi globale.Attributo OwinStartup: questo è l'approccio che la maggior parte degli sviluppatori dovrà adottare per specificare la classe di avvio. L'attributo seguente imposterà la classe di avvio sulla
TestStartup
classe nello spazio deiStartupDemo
nomi .[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
L'attributo
OwinStartup
esegue l'override della convenzione di denominazione. È anche possibile specificare un nome descrittivo con questo attributo, ma l'uso di un nome descrittivo richiede anche l'uso dell'elementoappSetting
nel file di configurazione.L'elemento appSetting nel file di configurazione: l'elemento
appSetting
esegue l'override dell'attributo e dellaOwinStartup
convenzione di denominazione. È possibile avere più classi di avvio (ognuna usando unOwinStartup
attributo) e configurare la classe di avvio che verrà caricata in un file di configurazione usando markup simile al seguente:<appSettings> <add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> </appSettings>
È anche possibile usare la chiave seguente, che specifica in modo esplicito la classe di avvio e l'assembly:
<add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" />
Il codice XML seguente nel file di configurazione specifica un nome descrittivo della classe di avvio di
ProductionConfiguration
.<appSettings> <add key="owin:appStartup" value="ProductionConfiguration" /> </appSettings>
Il markup precedente deve essere usato con l'attributo seguente
OwinStartup
che specifica un nome descrittivo e fa sì che laProductionStartup2
classe venga eseguita.[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup2))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } public class ProductionStartup2 { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " 2nd Production OWIN App"); }); } } }
Per disabilitare l'individuazione di avvio OWIN, aggiungere con
appSetting owin:AutomaticAppStartup
un valore di"false"
nel file di web.config.<add key="owin:AutomaticAppStartup" value="false" />
Creare un'app Web ASP.NET usando l'avvio OWIN
Creare un'applicazione Web Asp.Net vuota e denominarla StartupDemo. - Installare
Microsoft.Owin.Host.SystemWeb
usando gestione pacchetti NuGet. Dal menu Strumenti selezionare Gestione pacchetti NuGet e quindi Console di Gestione pacchetti. Immettere il comando seguente:Install-Package Microsoft.Owin.Host.SystemWeb
Aggiungere una classe di avvio OWIN. In Visual Studio 2017 fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi classe. Nella finestra di dialogo Aggiungi nuovo elemento immettere OWIN nel campo di ricerca e modificare il nome in Startup.cs e quindi scegliere Aggiungi.
La volta successiva che si vuole aggiungere una classe Owin Startup, sarà disponibile dal menu Aggiungi .
In alternativa, è possibile fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi, quindi nuovo elemento e quindi selezionare la classe Owin Startup.
Sostituire il codice generato nel file Startup.cs con il codice seguente:
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; using System.IO; //[assembly: OwinStartup(typeof(StartupDemo.Startup))] namespace StartupDemo { public class Startup { public void Configuration(IAppBuilder app) { app.Use((context, next) => { TextWriter output = context.Get<TextWriter>("host.TraceOutput"); return next().ContinueWith(result => { output.WriteLine("Scheme {0} : Method {1} : Path {2} : MS {3}", context.Request.Scheme, context.Request.Method, context.Request.Path, getTime()); }); }); app.Run(async context => { await context.Response.WriteAsync(getTime() + " My First OWIN App"); }); } string getTime() { return DateTime.Now.Millisecond.ToString(); } } }
L'espressione
app.Use
lambda viene usata per registrare il componente middleware specificato nella pipeline OWIN. In questo caso viene impostata la registrazione delle richieste in ingresso prima di rispondere alla richiesta in ingresso. Ilnext
parametro è il delegato ( Attività Func<>) al componente successivo nella pipeline. L'espressioneapp.Run
lambda associa la pipeline alle richieste in ingresso e fornisce il meccanismo di risposta.Nota
Nel codice precedente è stato impostato come commento l'attributo
OwinStartup
e ci si basa sulla convenzione di esecuzione della classe denominataStartup
.- Premere F5 per eseguire l'applicazione. Premere l'aggiornamento alcune volte.Nota: il numero visualizzato nelle immagini di questa esercitazione non corrisponderà al numero visualizzato. La stringa di millisecondi viene usata per visualizzare una nuova risposta quando si aggiorna la pagina. È possibile visualizzare le informazioni di traccia nella finestra Output .
Aggiungere altre classi di avvio
In questa sezione verrà aggiunta un'altra classe Startup. È possibile aggiungere più classi di avvio OWIN all'applicazione. Ad esempio, è possibile creare classi di avvio per sviluppo, test e produzione.
Creare una nuova classe OWIN Startup e denominarla
ProductionStartup
.Sostituire il codice generato con il seguente:
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] namespace StartupDemo { public class ProductionStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Production OWIN App"); }); } } }
Premere F5 per eseguire l'app. L'attributo
OwinStartup
specifica che viene eseguita la classe di avvio di produzione.Creare un'altra classe di avvio OWIN e denominarla
TestStartup
.Sostituire il codice generato con il seguente:
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup("TestingConfiguration", typeof(StartupDemo.TestStartup))] namespace StartupDemo { public class TestStartup { public void Configuration(IAppBuilder app) { app.Run(context => { string t = DateTime.Now.Millisecond.ToString(); return context.Response.WriteAsync(t + " Test OWIN App"); }); } } }
L'overload dell'attributo
OwinStartup
precedente specificaTestingConfiguration
come nome descrittivo della classe Startup.Aprire il file web.config e aggiungere la chiave di avvio dell'app OWIN che specifica il nome descrittivo della classe Startup:
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="TestingConfiguration" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
Premere F5 per eseguire l'app. L'elemento delle impostazioni dell'app ha un precedente e viene eseguita la configurazione di test.
Rimuovere il nome descrittivo dall'attributo
OwinStartup
nellaTestStartup
classe .[assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
Sostituire la chiave di avvio dell'app OWIN nel fileweb.configcon quanto segue:
<add key="owin:appStartup" value="StartupDemo.TestStartup" />
Ripristinare l'attributo
OwinStartup
in ogni classe al codice di attributo predefinito generato da Visual Studio:[assembly: OwinStartup(typeof(StartupDemo.Startup))] [assembly: OwinStartup(typeof(StartupDemo.ProductionStartup))] [assembly: OwinStartup(typeof(StartupDemo.TestStartup))]
Ognuna delle chiavi di avvio dell'app OWIN riportata di seguito causerà l'esecuzione della classe di produzione.
<add key="owin:appStartup" value="StartupDemo.ProductionStartup" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup, StartupDemo" /> <add key="owin:appStartup" value="StartupDemo.ProductionStartup.Configuration, StartupDemo" />
L'ultima chiave di avvio specifica il metodo di configurazione di avvio. La chiave di avvio dell'app OWIN seguente consente di modificare il nome della classe di configurazione in
MyConfiguration
.<add key="owin:appStartup" value="StartupDemo.ProductionStartup2.MyConfiguration" />
Uso di Owinhost.exe
Sostituire il file Web.config con il markup seguente:
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="owin:appStartup" value="StartupDemo.Startup" /> <add key="owin:appStartup" value="StartupDemo.TestStartup" /> </appSettings> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> </system.web> </configuration>
L'ultima chiave prevale, quindi in questo caso
TestStartup
viene specificata.Installare Owinhost dal PMC:
Install-Package OwinHost
Passare alla cartella dell'applicazione (la cartella contenente il file Web.config ) e in un prompt dei comandi e digitare:
..\packages\Owinhost<Version>\tools\Owinhost.exe
Verrà visualizzata la finestra di comando:
C:\StartupDemo\StartupDemo>..\packages\OwinHost.2.0.0\tools\Owin Host.exe Starting with the default port: 5000 (http://localhost:5000/) Started successfully Press Enter to exit
Avviare un browser con l'URL
http://localhost:5000/
.OwinHost ha rispettato le convenzioni di avvio elencate in precedenza.
Nella finestra di comando premere INVIO per uscire da OwinHost.
ProductionStartup
Nella classe aggiungere l'attributo OwinStartup seguente che specifica un nome descrittivo di ProductionConfiguration.[assembly: OwinStartup("ProductionConfiguration", typeof(StartupDemo.ProductionStartup))]
Nel prompt dei comandi e digitare:
..\packages\OwinHost.2.0.0\tools\OwinHost.exe ProductionConfiguration
La classe di avvio Production viene caricata.
L'applicazione include più classi di avvio e in questo esempio è stata posticipata la classe di avvio da caricare fino al runtime.
Testare le opzioni di avvio di runtime seguenti:
..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup,StartupDemo" ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe StartupDemo.TestStartup.Configuration ..\packages\OwinHost.2.0.0-rc1\tools\OwinHost.exe "StartupDemo.TestStartup.Configuration,StartupDemo"
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per