Öppna webbgränssnittet för .NET (OWIN) med ASP.NET Core
Av Steve Smith och Rick Anderson
ASP.NET Core:
- Stödjer Open Web Interface for .NET (OWIN).
- Har .NET Core-kompatibla ersättningar för biblioteken
Microsoft.Owin.*
(Katana).
OWIN tillåter att webbappar frikopplas från webbservrar. Den definierar ett standardsätt för mellanprogram som ska användas i en pipeline för att hantera begäranden och tillhörande svar. ASP.NET Core-program och mellanprogram kan samverka med OWIN-baserade program, servrar och mellanprogram.
OWIN tillhandahåller ett frikopplingslager som gör att två ramverk med olika objektmodeller kan användas tillsammans.
Microsoft.AspNetCore.Owin
-paketet innehåller två adapterimplementeringar:
- ASP.NET Core till OWIN
- OWIN till ASP.NET Core
På så sätt kan ASP.NET Core finnas ovanpå en OWIN-kompatibel server/värd eller för att andra OWIN-kompatibla komponenter ska köras ovanpå ASP.NET Core.
Not
Användning av dessa adaptrar medför en prestandaförlust. Appar som bara använder ASP.NET Core-komponenter ska inte använda Microsoft.AspNetCore.Owin
-paketet eller adaptrarna.
Visa eller ladda ned exempelkod (hur du laddar ned)
Köra OWIN-mellanprogram i ASP.NET Core-pipelinen
ASP.NET CoreS OWIN-stöd distribueras som en del av Microsoft.AspNetCore.Owin
-paketet. Du kan importera OWIN-stöd till projektet genom att installera det här paketet.
OWIN-mellanprogram överensstämmer med OWIN-specifikationen, som kräver ett Func<IDictionary<string, object>, Task>
-gränssnitt och specifika nycklar anges (till exempel owin.ResponseBody
). Följande enkla OWIN-mellanprogram visar "Hello World":
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);
}
Exempelsignaturen returnerar en Task
och accepterar en IDictionary<string, object>
som krävs av OWIN.
Följande kod visar hur du lägger till OwinHello
mellanprogram (visas ovan) i ASP.NET Core-pipelinen med UseOwin
-tilläggsmetoden.
public void Configure(IApplicationBuilder app)
{
app.UseOwin(pipeline =>
{
pipeline(next => OwinHello);
});
}
Du kan konfigurera andra åtgärder som ska utföras i OWIN-pipelinen.
Not
Responsrubriker ska bara ändras innan den första skrivningen till responsströmmen.
Not
Flera anrop till UseOwin
avråds för prestandaskäl. OWIN-komponenter fungerar bäst om de grupperas tillsammans.
app.UseOwin(pipeline =>
{
pipeline(next =>
{
return async environment =>
{
// Do something before.
await next(environment);
// Do something after.
};
});
});
OWIN-miljö
Du kan skapa en OWIN-miljö med hjälp av HttpContext
.
var environment = new OwinEnvironment(HttpContext);
var features = new OwinFeatureCollection(environment);
OWIN-nycklar
OWIN är beroende av ett IDictionary<string,object>
objekt för att kommunicera information i ett HTTP-begäran/svar-utbyte. ASP.NET Core implementerar nycklarna som anges nedan. Se den primära specifikationen , tilläggenoch samt OWIN:s nyckelriktlinjer och vanliga nycklar.
Begär data (OWIN v1.0.0)
Nyckel | Värde (typ) | Beskrivning |
---|---|---|
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 |
Begär data (OWIN v1.1.0)
Nyckel | Värde (typ) | Beskrivning |
---|---|---|
owin.RequestId | String |
Valfri |
Svarsdata (OWIN v1.0.0)
Nyckel | Värde (typ) | Beskrivning |
---|---|---|
owin. ResponseStatusCode | int |
Valfri |
owin. ResponseReasonPhrase | String |
Valfri |
owin. ResponseHeaders | IDictionary<string,string[]> |
|
owin. ResponseBody | Stream |
Andra data (OWIN v1.0.0)
Nyckel | Värde (typ) | Beskrivning |
---|---|---|
owin. CallCancelled | CancellationToken |
|
owin.Version | String |
Vanliga nycklar
Nyckel | Värde (typ) | Beskrivning |
---|---|---|
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
Nyckel | Värde (typ) | Beskrivning |
---|---|---|
sendfile.SendAsync | Se som ombudssignatur | På begäran |
Opaque v0.3.0
Nyckel | Värde (typ) | Beskrivning |
---|---|---|
ogenomskinlig.Version | String |
|
ogenomskinlig. Uppgradera | OpaqueUpgrade |
Se ombudssignatur |
ogenomskinlig ström | Stream |
|
ogenomskinlig.SamtalAvbrutet | CancellationToken |
WebSocket v0.3.0
Nyckel | Värde (typ) | Beskrivning |
---|---|---|
websocket. Version | String |
|
websocket.Acceptera | WebSocketAccept |
Se ombudssignatur |
websocket.AcceptAlt | Icke-specifik | |
websocket.SubProtocol | String |
Se RFC6455 avsnitt 4.2.2 steg 5.5 |
websocket.SendAsync | WebSocketSendAsync |
Se ombudssignatur |
websocket.ReceiveAsync | WebSocketReceiveAsync |
Se ombudssignatur |
websocket.CloseAsync | WebSocketCloseAsync |
Se ombudssignatur |
websocket. CallCancelled | CancellationToken |
|
websocket.ClientCloseStatus | int |
Valfri |
websocket.ClientCloseDescription | String |
Valfri |
Ytterligare resurser
- Se källan på GitHub för OWIN-nycklar som stöds i översättningslagret.
- Mellanprogram
- servrar
ASP.NET Core