Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Av Steve Smith och Rick Anderson
ASP.NET Core:
- Stödjer Open Web Interface for .NET (OWIN).
- Har kompatibla ersättningar för Microsoft.Owin.*Katana-biblioteken.
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.
Note
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 (ladda 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: 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);
}
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.
Note
Responsrubriker ska bara ändras innan den första skrivningen till responsströmmen.
Note
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äggen och OWIN-nyckelriktlinjerna och Vanliga nycklar.
Begär data (OWIN v1.0.0)
| Key | Värde (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 | 
Begär data (OWIN v1.1.0)
| Key | Värde (typ) | Description | 
|---|---|---|
| owin.RequestId | String | Optional | 
Svarsdata (OWIN v1.0.0)
| Key | Värde (typ) | Description | 
|---|---|---|
| owin.ResponseStatusCode | int | Optional | 
| owin.ResponseReasonPhrase | String | Optional | 
| owin.ResponseHeaders | IDictionary<string,string[]> | |
| owin.ResponseBody | Stream | 
Andra data (OWIN v1.0.0)
| Key | Värde (typ) | Description | 
|---|---|---|
| owin.CallCancelled | CancellationToken | |
| owin.Version | String | 
Vanliga nycklar
| Key | Värde (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 | Värde (typ) | Description | 
|---|---|---|
| sendfile.SendAsync | Se ombudssignatur | Per begäran | 
Ogenomskinlig v0.3.0
| Key | Värde (typ) | Description | 
|---|---|---|
| opaque.Version | String | |
| opaque.Upgrade | OpaqueUpgrade | Se ombudssignatur | 
| opaque.Stream | Stream | |
| opaque.CallCancelled | CancellationToken | 
WebSocket v0.3.0
| Key | Värde (typ) | Description | 
|---|---|---|
| websocket.Version | String | |
| websocket.Accept | WebSocketAccept | Se ombudssignatur | 
| websocket.AcceptAlt | Non-spec | |
| 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 | Optional | 
| websocket.ClientCloseDescription | String | Optional | 
Ytterligare resurser
- Se källan på GitHub för OWIN-nycklar som stöds i översättningslagret.
- Middleware
- Servers
ASP.NET Core