Dela via


Ö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