Sdílet prostřednictvím


Otevření webového rozhraní pro .NET (OWIN) s ASP.NET Core

Steve Smith a Rick Anderson

ASP.NET Core:

  • Podporuje rozhraní Open Web Interface pro .NET (OWIN).
  • Má kompatibilní náhrady knihoven Microsoft.Owin.* (Katana).

OWIN umožňuje oddělení webových aplikací od webových serverů. Definuje standardní způsob použití middlewaru v kanálu ke zpracování požadavků a přidružených odpovědí. ASP.NET základní aplikace a middleware můžou spolupracovat s aplikacemi, servery a middlewarem založenými na OWIN.

OWIN poskytuje oddělenou vrstvu, která umožňuje použití dvou architektur s různorodými objektovými modely. Balíček Microsoft.AspNetCore.Owin poskytuje dvě implementace adaptérů:

  • ASP.NET Core do OWIN
  • OWIN k ASP.NET Core

To umožňuje hostování ASP.NET Core nad serverem nebo hostitelem kompatibilním s OWIN nebo s jinými kompatibilními komponentami OWIN nad ASP.NET Core.

Note

Používání těchto adaptérů má náklady na výkon. Aplikace používající pouze ASP.NET základní komponenty by neměly používat Microsoft.AspNetCore.Owin balíčky ani adaptéry.

Zobrazení nebo stažení ukázkového kódu (postup stažení)

Spuštění middlewaru OWIN v kanálu ASP.NET Core

ASP.NET podpora OWIN core se nasadí jako součást Microsoft.AspNetCore.Owin balíčku. Podporu OWIN můžete do projektu importovat instalací tohoto balíčku.

Middleware OWIN odpovídá specifikaci OWIN, která vyžaduje Func<IDictionary<string, object>, Task> rozhraní, a konkrétní klíče se nastavují (například owin.ResponseBody). Následující jednoduchý middleware OWIN zobrazí "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);
}

Ukázkový podpis vrátí Task hodnotu a přijme ji IDictionary<string, object> podle potřeby OWIN.

Následující kód ukazuje, jak pomocí metody rozšíření přidat OwinHello middleware (viz výše) do kanálu UseOwin ASP.NET Core.

public void Configure(IApplicationBuilder app)
{
    app.UseOwin(pipeline =>
    {
        pipeline(next => OwinHello);
    });
}

Můžete nakonfigurovat další akce, které se mají provést v rámci kanálu OWIN.

Note

Hlavičky odpovědi by se měly upravit pouze před prvním zápisem do streamu odpovědi.

Note

Z důvodů výkonu UseOwin se nedoporučuje více volání. Komponenty OWIN budou fungovat nejlépe, pokud jsou seskupené dohromady.

app.UseOwin(pipeline =>
{
    pipeline(next =>
    {
        return async environment =>
        {
            // Do something before.
            await next(environment);
            // Do something after.
        };
    });
});

Prostředí OWIN

Můžete vytvořit prostředí OWIN pomocí .HttpContext


   var environment = new OwinEnvironment(HttpContext);
   var features = new OwinFeatureCollection(environment);

Klíče OWIN

OWIN závisí na objektu IDictionary<string,object> , který komunikuje s informacemi v rámci výměny požadavků a odpovědí HTTP. ASP.NET Core implementuje níže uvedené klíče. Viz primární specifikace, rozšíření a pokyny pro klíče OWIN a běžné klíče.

Vyžádání dat (OWIN v1.0.0)

Key Hodnota (typ) Description
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

Vyžádání dat (OWIN v1.1.0)

Key Hodnota (typ) Description
owin.RequestId String Optional

Data odpovědi (OWIN v1.0.0)

Key Hodnota (typ) Description
owin.ResponseStatusCode int Optional
owin.ResponseReasonPhrase String Optional
owin.ResponseHeaders IDictionary<string,string[]>
owin.ResponseBody Stream

Další data (OWIN v1.0.0)

Key Hodnota (typ) Description
owin.CallCancelled CancellationToken
owin.Version String

Běžné klíče

Key Hodnota (typ) Description
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

Key Hodnota (typ) Description
sendfile.SendAsync Zobrazit podpis delegáta Na žádost

Neprůhlený v0.3.0

Key Hodnota (typ) Description
opaque.Version String
opaque.Upgrade OpaqueUpgrade Zobrazit podpis delegáta
opaque.Stream Stream
opaque.CallCancelled CancellationToken

WebSocket v0.3.0

Key Hodnota (typ) Description
websocket.Version String
websocket.Accept WebSocketAccept Zobrazit podpis delegáta
websocket.AcceptAlt Non-spec
websocket.SubProtocol String Viz RFC6455 oddíl 4.2.2 Krok 5.5
websocket.SendAsync WebSocketSendAsync Zobrazit podpis delegáta
websocket.ReceiveAsync WebSocketReceiveAsync Zobrazit podpis delegáta
websocket.CloseAsync WebSocketCloseAsync Zobrazit podpis delegáta
websocket.CallCancelled CancellationToken
websocket.ClientCloseStatus int Optional
websocket.ClientCloseDescription String Optional

Dodatečné zdroje

  • Podívejte se na zdroj na GitHubu pro klíče OWIN podporované ve vrstvě překladu.
  • Middleware
  • Servers