Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Di Steve Smith e Rick Anderson
ASP.NET Core:
- Supporta Open Web Interface per .NET (OWIN).
- Include sostituzioni compatibili con .NET Core per le
Microsoft.Owin.*
librerie (Katana).
OWIN consente alle app Web di essere disaccoppiate dai server Web. Definisce un modo standard per usare il middleware in una pipeline per gestire le richieste e le risposte associate. Le applicazioni ASP.NET Core e il middleware possono interagire con middleware, server e applicazioni basati su OWIN.
OWIN specifica un livello di disaccoppiamento che consente di usare contemporaneamente due framework con modelli a oggetti diversi. Il pacchetto Microsoft.AspNetCore.Owin
offre due implementazioni dell'adattatore:
- Da ASP.NET Core a OWIN
- Da OWIN a ASP.NET Core
In questo modo ASP.NET Core può essere ospitato in un server/host compatibile con OWIN o altri componenti compatibili con OWIN possono essere eseguiti su ASP.NET Core.
Nota
L'uso di questi adattatori comporta una riduzione delle prestazioni. Le app che usano solo componenti di ASP.NET Core non devono usare il pacchetto o gli adattatori Microsoft.AspNetCore.Owin
.
Visualizzare o scaricare il codice di esempio (come scaricare)
Esecuzione del middleware OWIN nella pipeline ASP.NET Core
Il supporto di OWIN per ASP.NET Core viene distribuito come parte del pacchetto Microsoft.AspNetCore.Owin
. Per importare il supporto OWIN nel progetto è necessario installare il pacchetto.
Il middleware OWIN è conforme alla specifica OWIN, che richiede un'interfaccia Func<IDictionary<string, object>, Task>
e devono essere impostate chiavi specifiche, ad esempio owin.ResponseBody
. Il semplice middleware OWIN illustrato di seguito visualizza "Hello World":
public Task OwinHello(IDictionary<string, object> environment)
{
string responseText = "Hello World via OWIN";
byte[] responseBytes = Encoding.UTF8.GetBytes(responseText);
// OWIN Environment Keys: http://owin.org/spec/spec/owin-1.0.0.html
var responseStream = (Stream)environment["owin.ResponseBody"];
var responseHeaders = (IDictionary<string, string[]>)environment["owin.ResponseHeaders"];
responseHeaders["Content-Length"] = new string[] { responseBytes.Length.ToString(CultureInfo.InvariantCulture) };
responseHeaders["Content-Type"] = new string[] { "text/plain" };
return responseStream.WriteAsync(responseBytes, 0, responseBytes.Length);
}
La firma di esempio restituisce un oggetto Task
e accetta un oggetto IDictionary<string, object>
come richiesto da OWIN.
Il codice seguente illustra come aggiungere il middleware OwinHello
, illustrato in precedenza, alla pipeline ASP.NET Core con il metodo di estensione UseOwin
.
public void Configure(IApplicationBuilder app)
{
app.UseOwin(pipeline =>
{
pipeline(next => OwinHello);
});
}
È possibile configurare altre azioni da eseguire all'interno della pipeline OWIN.
Nota
Le intestazioni di risposta devono essere modificate solo prima della prima scrittura nel flusso di risposta.
Nota
Le chiamate multiple al metodo UseOwin
sono sconsigliate per non compromettere le prestazioni. I componenti OWIN funzionano meglio se raggruppati insieme.
app.UseOwin(pipeline =>
{
pipeline(next =>
{
return async environment =>
{
// Do something before.
await next(environment);
// Do something after.
};
});
});
Ambiente OWIN
È possibile creare un ambiente OWIN tramite HttpContext
.
var environment = new OwinEnvironment(HttpContext);
var features = new OwinFeatureCollection(environment);
Chiavi OWIN
OWIN dipende da un oggetto IDictionary<string,object>
per comunicare informazioni attraverso uno scambio di richiesta/risposta HTTP. ASP.NET Core implementa le chiavi elencate di seguito. Vedere le specifiche principali, le estensioni e le linee guida chiave e le chiavi comuni OWIN.
Dati della richiesta (OWIN versione 1.0.0)
Chiave | Valore (tipo) | Descrizione |
---|---|---|
owin. Schema di richiesta | String |
|
owin. Metodo RequestMethod | String |
|
owin. RequestPathBase | String |
|
owin. Percorso di richiesta | String |
|
owin. RequestQueryString | String |
|
owin. RequestProtocol | String |
|
owin. RequestHeaders | IDictionary<string,string[]> |
|
owin. Corpo della richiesta | Stream |
Dati della richiesta (OWIN versione 1.1.0)
Chiave | Valore (tipo) | Descrizione |
---|---|---|
owin. RequestId | String |
Facoltativo |
Dati della risposta (OWIN versione 1.0.0)
Chiave | Valore (tipo) | Descrizione |
---|---|---|
owin. ResponseStatusCode | int |
Facoltativo |
owin. ResponseReasonPhrase | String |
Facoltativo |
owin. ResponseHeaders | IDictionary<string,string[]> |
|
owin. ResponseBody | Stream |
Altri dati (OWIN versione 1.0.0)
Chiave | Valore (tipo) | Descrizione |
---|---|---|
owin. CallCancelled | CancellationToken |
|
owin. Versione | String |
Chiavi comuni
Chiave | Valore (tipo) | Descrizione |
---|---|---|
ssl. ClientCertificate | X509Certificate |
|
ssl. LoadClientCertAsync | Func<Task> |
|
server. RemoteIpAddress | String |
|
server. RemotePort | String |
|
server. Indirizzo IP locale | String |
|
server. Porta locale | String |
|
server. OnSendingHeaders | Action<Action<object>,object> |
SendFiles v0.3.0
Chiave | Valore (tipo) | Descrizione |
---|---|---|
sendfile. SendAsync | Vedere firma del delegato | Per richiesta |
Opaco v0.3.0
Chiave | Valore (tipo) | Descrizione |
---|---|---|
opaco. Versione | String |
|
opaco. Aggiornamento | OpaqueUpgrade |
Vedere firma del delegato |
flusso opaco | Stream |
|
opaco.ChiamataAnnullata | CancellationToken |
WebSocket v0.3.0
Chiave | Valore (tipo) | Descrizione |
---|---|---|
websocket. Versione | String |
|
websocket.Accetta | WebSocketAccept |
Vedere firma del delegato |
Websocket. AcceptAlt | Non specificata | |
websocket. Sottoprotocolo | String |
Vedere RFC6455 sezione 4.2.2 Passaggio 5.5 |
Websocket. SendAsync | WebSocketSendAsync |
Vedere firma del delegato |
Websocket. ReceiveAsync | WebSocketReceiveAsync |
Vedere firma del delegato |
Websocket. ChiudiAsincrono | WebSocketCloseAsync |
Vedere firma del delegato |
websocket.ChiamataAnnullata | CancellationToken |
|
Websocket. ClientCloseStatus | int |
Facoltativo |
Websocket. ClientCloseDescrizione | String |
Facoltativo |
Risorse aggiuntive
- Consulta il codice sorgente su GitHub per le chiavi OWIN supportate nel livello di traduzione.
- Middleware
- Server