Open Web Interface voor .NET (OWIN) met ASP.NET Core
Door Steve Smith en Rick Anderson
ASP.NET Core:
- Ondersteunt de Open Web Interface voor .NET (OWIN).
- Bevat .NET Core-compatibele vervangingen voor de
Microsoft.Owin.*
(Katana-) bibliotheken.
Met OWIN kunnen web-apps worden losgekoppeld van webservers. Het definieert een standaardmethode voor middleware die in een pijplijn moet worden gebruikt om aanvragen en bijbehorende antwoorden te verwerken. ASP.NET Core-toepassingen en middleware kunnen samenwerken met OWIN-toepassingen, servers en middleware.
OWIN biedt een ontkoppelingslaag waarmee twee frameworks met verschillende objectmodellen samen kunnen worden gebruikt. Het Microsoft.AspNetCore.Owin
-pakket biedt twee adapter-implementaties:
- ASP.NET Core naar OWIN
- OWIN naar ASP.NET Core
Hierdoor kan ASP.NET Core worden gehost boven op een OWIN-compatibele server/host of voor andere OWIN-compatibele onderdelen die boven op ASP.NET Core worden uitgevoerd.
Notitie
Het gebruik van deze adapters heeft een prestatieverlies. Apps die alleen ASP.NET Core-onderdelen gebruiken, mogen het Microsoft.AspNetCore.Owin
pakket of adapters niet gebruiken.
Voorbeeldcode bekijken of downloaden (hoe te downloaden)
OWIN-middleware uitvoeren in de ASP.NET Core-pijplijn
de OWIN-ondersteuning van ASP.NET Core wordt geïmplementeerd als onderdeel van het Microsoft.AspNetCore.Owin
-pakket. U kunt OWIN-ondersteuning importeren in uw project door dit pakket te installeren.
OWIN middleware voldoet aan de OWIN-specificatie, waarvoor een Func<IDictionary<string, object>, Task>
interface is vereist en specifieke sleutels moeten worden ingesteld (zoals owin.ResponseBody
). In de volgende eenvoudige OWIN-middleware wordt 'Hallo wereld' weergegeven:
public Task OwinHello(IDictionary<string, object> environment)
{
string responseText = "Hello World via OWIN";
byte[] responseBytes = Encoding.UTF8.GetBytes(responseText);
// OWIN Environment Keys: https://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);
}
De voorbeeldhandtekening retourneert een Task
en accepteert een IDictionary<string, object>
zoals vereist door OWIN.
De volgende code laat zien hoe u de OwinHello
middleware (hierboven) toevoegt aan de ASP.NET Core-pijplijn met de UseOwin
-extensiemethode.
public void Configure(IApplicationBuilder app)
{
app.UseOwin(pipeline =>
{
pipeline(next => OwinHello);
});
}
U kunt andere acties configureren die plaatsvinden in de OWIN-pijplijn.
Notitie
Antwoordheaders mogen alleen worden gewijzigd voordat de eerste schrijfbewerking naar de antwoordstroom wordt uitgevoerd.
Notitie
Meerdere aanroepen naar UseOwin
worden om prestatieredenen afgeraden. OWIN-onderdelen werken het beste als ze zijn gegroepeerd.
app.UseOwin(pipeline =>
{
pipeline(next =>
{
return async environment =>
{
// Do something before.
await next(environment);
// Do something after.
};
});
});
OWIN-omgeving
U kunt een OWIN-omgeving maken met behulp van de HttpContext
.
var environment = new OwinEnvironment(HttpContext);
var features = new OwinFeatureCollection(environment);
OWIN-sleutels
OWIN is afhankelijk van een IDictionary<string,object>
-object om informatie over te brengen in een HTTP-aanvraag-/antwoorduitwisseling. ASP.NET Core implementeert de onderstaande sleutels. Zie de primaire specificatie, extensiesen OWIN-sleutelrichtlijnen en algemene sleutels.
Gegevens aanvragen (OWIN v1.0.0)
Sleutel | Waarde (type) | Beschrijving |
---|---|---|
owin.RequestScheme | String |
|
owin.RequestMethod | String |
|
owin.RequestPathBase | String |
|
owin.RequestPath | String |
|
owin.RequestQueryString | String |
|
owin.RequestProtocol | String |
|
owin. RequestHeaders | IDictionary<string,string[]> |
|
owin.RequestBody | Stream |
Aanvraaggegevens (OWIN v1.1.0)
Sleutel | Waarde (type) | Beschrijving |
---|---|---|
owin.RequestId | String |
Facultatief |
Antwoordgegevens (OWIN v1.0.0)
Sleutel | Waarde (type) | Beschrijving |
---|---|---|
owin. ResponseStatusCode | int |
Facultatief |
owin. ResponseReasonPhrase | String |
Facultatief |
owin. ResponseHeaders | IDictionary<string,string[]> |
|
owin. ResponseBody | Stream |
Overige gegevens (OWIN v1.0.0)
Sleutel | Waarde (type) | Beschrijving |
---|---|---|
owin. CallCancelled | CancellationToken |
|
owin.Versie | String |
Algemene sleutels
Sleutel | Waarde (type) | Beschrijving |
---|---|---|
ssl. ClientCertificate | X509Certificate |
|
ssl.LoadClientCertAsync | Func<Task> |
|
server. RemoteIpAddress | String |
|
server. RemotePort | String |
|
server.LocalIpAddress | String |
|
server.LocalPort | String |
|
server.OnSendingHeaders | Action<Action<object>,object> |
SendFiles v0.3.0
Sleutel | Waarde (type) | Beschrijving |
---|---|---|
sendfile.SendAsync | Zie gedelegeerde handtekening | Op verzoek |
Opaque v0.3.0
Sleutel | Waarde (type) | Beschrijving |
---|---|---|
ondoorzichtig. Versie | String |
|
ondoorzichtig. Opwaarderen | OpaqueUpgrade |
Zie gedelegeerde handtekening |
ondoorzichtig. Stroom | Stream |
|
Onverzichtelijk.OproepGeannuleerd | CancellationToken |
WebSocket v0.3.0
Sleutel | Waarde (type) | Beschrijving |
---|---|---|
websocket. Versie | String |
|
websocket. Accepteren | WebSocketAccept |
Zie handtekening van gedelegeerde |
websocket.AcceptAlt | Niet-specifiek | |
websocket.SubProtocol | String |
Zie RFC6455 sectie 4.2.2 stap 5.5 |
websocket.SendAsync | WebSocketSendAsync |
Zie handtekening van gedelegeerde |
websocket.ReceiveAsync | WebSocketReceiveAsync |
Zie handtekening van de afgevaardigde |
websocket.CloseAsync | WebSocketCloseAsync |
Zie handtekening van gedelegeerde |
websocket. CallCancelled | CancellationToken |
|
websocket.ClientCloseStatus | int |
Facultatief |
websocket.ClientCloseDescription | String |
Facultatief |
Aanvullende informatiebronnen
- Zie de -bron op GitHub voor OWIN-sleutels die worden ondersteund in de vertaallaag.
- Middleware
- Servers