ASP.NET Core ile .NET için Web arabirimi 'ni (OWıN) açın
, Steve Smith ve Rick Anderson tarafından
ASP.NET Core:
- .NET için açık Web arabirimi 'Ni (OWıN) destekler.
Microsoft.Owin.*(Katana) kitaplıklar için .NET Core ile uyumlu değişiklikler içerir.
OWIN, Web uygulamalarının Web sunucularından ayrılmasıyla izin verir. Bu işlem, ara yazılım için istekleri ve ilişkili yanıtları işlemek üzere bir ardışık düzende kullanılması için standart bir yol tanımlar. ASP.NET Core uygulamalar ve ara yazılım, OWıN tabanlı uygulamalar, sunucular ve ara yazılım ile birlikte çalışabilir.
OWIN, farklı nesne modellerinin birlikte kullanılmasına izin veren bir ayrılmış katman sağlar. Microsoft.AspNetCore.OwinPaket iki bağdaştırıcı uygulaması sağlar:
- OWıN 'a ASP.NET Core
- ASP.NET Core için OWıN
Bu, ASP.NET Core bir OWIN uyumlu sunucu/konak üzerinde barındırılmasına veya diğer OWIN uyumlu bileşenlerin ASP.NET Core üzerinde çalıştırılmasını sağlar.
Not
Bu bağdaştırıcıların kullanılması bir performans maliyetiyle birlikte gelir. Yalnızca ASP.NET Core bileşenleri kullanan uygulamalar Microsoft.AspNetCore.Owin paketi veya bağdaştırıcıları kullanmaz.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
ASP.NET Core ardışık düzeninde OWıN ara yazılımı çalıştırma
ASP.NET Core 'nin OWıN desteği paketin bir parçası olarak dağıtılır Microsoft.AspNetCore.Owin . Bu paketi yükleyerek, OWıN desteğini projenize aktarabilirsiniz.
OWıN ara yazılımı, bir arabirim gerektiren owın belirtimine Func<IDictionary<string, object>, Task> ve belirli anahtarların ayarlanmasını sağlar (örneğin, owin.ResponseBody ). Aşağıdaki basit OWıN ara yazılımı "Merhaba Dünya" görüntüler:
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);
}
Örnek imza bir döndürür Task ve IDictionary<string, object> Owin için gereken bir şekilde kabul eder.
Aşağıdaki kod, OwinHello genişletme yöntemi ile ASP.NET Core işlem hattına ara yazılım ekleme (yukarıda gösterilen) gösterilmektedir UseOwin .
public void Configure(IApplicationBuilder app)
{
app.UseOwin(pipeline =>
{
pipeline(next => OwinHello);
});
}
OWıN ardışık düzeninde gerçekleşecek diğer eylemleri yapılandırabilirsiniz.
Not
Yanıt üst bilgileri yalnızca yanıt akışına ilk yazmaya başlamadan önce değiştirilmelidir.
Not
Performans nedenleriyle birden çok çağrısı UseOwin önerilmez. OWIN bileşenleri, birlikte gruplandırılmışsa en iyi şekilde çalışır.
app.UseOwin(pipeline =>
{
pipeline(next =>
{
return async environment =>
{
// Do something before.
await next(environment);
// Do something after.
};
});
});
OWIN tabanlı bir sunucuda ASP.NET Core çalıştırın ve WebSockets desteğini kullanın
ASP.NET Core ile OWıN tabanlı sunucuların özelliklerinin nasıl yararlanılabilir, WebSockets gibi özelliklere erişim için bir örnektir. Önceki örnekte kullanılan .NET OWIN Web sunucusu, içinde yerleşik olarak bulunan ve bir ASP.NET Core uygulaması tarafından yararlanılabilir olabilen Web Yuvaları desteği içerir. Aşağıdaki örnekte, Web yuvalarını destekleyen ve WebSockets üzerinden sunucuya gönderilen her şeyi yankılayan basit bir Web uygulaması gösterilmektedir.
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
if (context.WebSockets.IsWebSocketRequest)
{
WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
await EchoWebSocket(webSocket);
}
else
{
await next();
}
});
app.Run(context =>
{
return context.Response.WriteAsync("Hello World");
});
}
private async Task EchoWebSocket(WebSocket webSocket)
{
byte[] buffer = new byte[1024];
WebSocketReceiveResult received = await webSocket.ReceiveAsync(
new ArraySegment<byte>(buffer), CancellationToken.None);
while (!webSocket.CloseStatus.HasValue)
{
// Echo anything we receive
await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, received.Count),
received.MessageType, received.EndOfMessage, CancellationToken.None);
received = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer),
CancellationToken.None);
}
await webSocket.CloseAsync(webSocket.CloseStatus.Value,
webSocket.CloseStatusDescription, CancellationToken.None);
}
}
OWıN ortamı
Kullanarak bir OWıN ortamı oluşturabilirsiniz HttpContext .
var environment = new OwinEnvironment(HttpContext);
var features = new OwinFeatureCollection(environment);
OWıN tuşları
OWIN, IDictionary<string,object> BIR http isteği/yanıt değişimi boyunca bilgi iletmek için bir nesneye bağımlıdır. ASP.NET Core aşağıda listelenen anahtarları uygular. Bkz. birincil belirtim, uzantılarve Owın anahtar kılavuzları ve ortak anahtarlar.
İstek verileri (OWıN v 1.0.0)
| Anahtar | Değer (tür) | Description |
|---|---|---|
| owın. RequestScheme | String |
|
| owın. RequestMethod | String |
|
| owın. RequestPathBase | String |
|
| owın. Istek yolu | String |
|
| owın. RequestQueryString | String |
|
| owın. RequestProtocol | String |
|
| owın. RequestHeaders | IDictionary<string,string[]> |
|
| owın. Istek gövdesi | Stream |
İstek verileri (OWıN v 1.1.0)
| Anahtar | Değer (tür) | Description |
|---|---|---|
| owın. No | String |
İsteğe Bağlı |
Yanıt verileri (OWIN v 1.0.0)
| Anahtar | Değer (tür) | Description |
|---|---|---|
| owın. ResponseStatusCode | int |
İsteğe Bağlı |
| owın. ResponseReasonPhrase | String |
İsteğe Bağlı |
| owın. ResponseHeaders | IDictionary<string,string[]> |
|
| owın. Yanıt gövdesi | Stream |
Diğer veriler (OWIN v 1.0.0)
| Anahtar | Değer (tür) | Description |
|---|---|---|
| owın. Calliptal edildi | CancellationToken |
|
| owın. Sürüm | String |
Ortak anahtarlar
| Anahtar | Değer (tür) | Description |
|---|---|---|
| SSL. ClientCertificate | X509Certificate |
|
| SSL. LoadClientCertAsync | Func<Task> |
|
| Server. Remoteıpaddress | String |
|
| Server. RemotePort | String |
|
| Server. LocalIPAddress | String |
|
| Server. LocalPort | String |
|
| Server. IsLocal | bool |
|
| Server. OnSendingHeaders | Action<Action<object>,object> |
SendFiles v 0.3.0
| Anahtar | Değer (tür) | Description |
|---|---|---|
| SendFile. SendAsync | Bkz. temsilci imzası | Istek başına |
Donuk v 0.3.0
| Anahtar | Değer (tür) | Description |
|---|---|---|
| ş. Sürüm | String |
|
| ş. Yükseltmenizi | OpaqueUpgrade |
Temsilci imzasını görme |
| Opak. Akışı | Stream |
|
| Opak. CallCancelled | CancellationToken |
WebSocket v0.3.0
| Anahtar | Değer (tür) | Description |
|---|---|---|
| Websocket. Sürüm | String |
|
| Websocket. Kabul | WebSocketAccept |
Temsilci imzasını görme |
| Websocket. AcceptAlt | Özel olmayan | |
| Websocket. SubProtocol | String |
Bkz. RFC6455 Bölüm 4.2.2 Adım 5.5 |
| Websocket. Sendasync | WebSocketSendAsync |
Temsilci imzasını görme |
| Websocket. ReceiveAsync | WebSocketReceiveAsync |
Temsilci imzasını görme |
| Websocket. CloseAsync | WebSocketCloseAsync |
Temsilci imzasını görme |
| Websocket. CallCancelled | CancellationToken |
|
| Websocket. ClientCloseStatus | int |
İsteğe Bağlı |
| Websocket. ClientCloseDescription | String |
İsteğe Bağlı |