.NET için Web Arabirimini (OWIN) ASP.NET Core ile açma
Tarafından Steve Smith ve Rick Anderson
ASP.NET Core:
- .NET (OWIN) için Açık Web Arabirimini destekler.
- (Katana) kitaplıkları için
Microsoft.Owin.*
.NET Core uyumlu değiştirmeleri vardır.
OWIN, web uygulamalarının web sunucularından ayrılmış olmasını sağlar. ara yazılımların istekleri ve ilişkili yanıtları işlemek için bir işlem hattında kullanılması için standart bir yol tanımlar. ASP.NET Core uygulamaları ve ara yazılımları OWIN tabanlı uygulamalar, sunucular ve ara yazılım ile birlikte çalışabilir.
OWIN, ayrı nesne modellerine sahip iki çerçevenin birlikte kullanılmasını sağlayan bir ayırma katmanı sağlar. Microsoft.AspNetCore.Owin
Paket iki bağdaştırıcı uygulaması sağlar:
- ASP.NET Core'u OWIN'e
- OWIN'ASP.NET Core
Bu, ASP.NET Core'un OWIN uyumlu bir sunucu/konak üzerinde barındırılmasına veya diğer OWIN uyumlu bileşenlerin ASP.NET Core'un üzerinde çalıştırılmasına olanak tanır.
Not
Bu bağdaştırıcıların kullanılması bir performans maliyetiyle birlikte gelir. Yalnızca ASP.NET Core bileşenlerini kullanan uygulamalar paketi veya bağdaştırıcıları kullanmamalıdır Microsoft.AspNetCore.Owin
.
Örnek kodu görüntüleme veya indirme (indirme)
ASP.NET Core işlem hattında OWIN ara yazılımını çalıştırma
ASP.NET Core'un OWIN desteği paketin Microsoft.AspNetCore.Owin
bir parçası olarak dağıtılır. Bu paketi yükleyerek OWIN desteğini projenize aktarabilirsiniz.
OWIN ara yazılımı, bir Func<IDictionary<string, object>, Task>
arabirim gerektiren ve belirli anahtarların (örneğinowin.ResponseBody
) ayarlanmasını gerektiren OWIN belirtimine uygundur. Aşağıdaki basit OWIN 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 Task
döndürür ve OWIN'in gerektirdiği şekilde değerini IDictionary<string, object>
kabul eder.
Aşağıdaki kod, uzantı yöntemiyle ara yazılımı (yukarıda gösterilmiştir) ASP.NET Core işlem hattına UseOwin
nasıl ekleneceğini OwinHello
gösterir.
public void Configure(IApplicationBuilder app)
{
app.UseOwin(pipeline =>
{
pipeline(next => OwinHello);
});
}
Diğer eylemleri OWIN işlem hattı içinde gerçekleştirilecek şekilde yapılandırabilirsiniz.
Not
Yanıt üst bilgileri yalnızca yanıt akışına ilk yazmadan önce değiştirilmelidir.
Not
Birden çok çağrısı UseOwin
performans nedeniyle ö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'u çalıştırın ve WebSockets desteğini kullanın
OWIN tabanlı sunucuların özelliklerinin ASP.NET Core tarafından nasıl kullanılabilmesine yönelik bir diğer örnek de WebSockets gibi özelliklere erişimdir. Önceki örnekte kullanılan .NET OWIN web sunucusu, ASP.NET Core uygulaması tarafından kullanılabilen yerleşik WebSockets desteğine sahiptir. Aşağıdaki örnekte WebSockets'i destekleyen ve WebSockets aracılığıyla sunucuya gönderilen her şeyi geri döndüren 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);
}
}
OWIN ortamı
kullanarak HttpContext
bir OWIN ortamı oluşturabilirsiniz.
var environment = new OwinEnvironment(HttpContext);
var features = new OwinFeatureCollection(environment);
OWIN anahtarları
OWIN, HTTP İsteği/Yanıt değişimi boyunca bilgi iletişim kurmak için bir IDictionary<string,object>
nesneye bağımlıdır. ASP.NET Core, aşağıda listelenen anahtarları uygular. Birincil belirtimlere, uzantılara ve OWIN Anahtar Yönergelerine ve Ortak Anahtarlara bakın.
İstek verileri (OWIN v1.0.0)
Anahtar | Değer (tür) | Açıklama |
---|---|---|
Owin'i seçin. RequestScheme | String |
|
Owin'i seçin. İstekMethod | String |
|
Owin'i seçin. RequestPathBase | String |
|
Owin'i seçin. RequestPath | String |
|
Owin'i seçin. RequestQueryString | String |
|
Owin'i seçin. RequestProtocol | String |
|
Owin'i seçin. RequestHeaders | IDictionary<string,string[]> |
|
Owin'i seçin. RequestBody | Stream |
İstek verileri (OWIN v1.1.0)
Anahtar | Değer (tür) | Açıklama |
---|---|---|
Owin'i seçin. RequestId | String |
İsteğe bağlı |
Yanıt verileri (OWIN v1.0.0)
Anahtar | Değer (tür) | Açıklama |
---|---|---|
Owin'i seçin. ResponseStatusCode | int |
İsteğe bağlı |
Owin'i seçin. ResponseReasonPhrase | String |
İsteğe bağlı |
Owin'i seçin. ResponseHeaders | IDictionary<string,string[]> |
|
Owin'i seçin. ResponseBody | Stream |
Diğer veriler (OWIN v1.0.0)
Anahtar | Değer (tür) | Açıklama |
---|---|---|
Owin'i seçin. CallCancelled | CancellationToken |
|
Owin'i seçin. Sürüm | String |
Ortak anahtarlar
Anahtar | Değer (tür) | Açıklama |
---|---|---|
ssl'i seçin. ClientCertificate | X509Certificate |
|
ssl'i seçin. LoadClientCertAsync | Func<Task> |
|
sunucu. RemoteIpAddress | String |
|
sunucu. RemotePort | String |
|
sunucu. LocalIpAddress | String |
|
sunucu. Yerel Bağlantı Noktası | String |
|
sunucu. OnSendingHeaders | Action<Action<object>,object> |
SendFiles v0.3.0
Anahtar | Değer (tür) | Açıklama |
---|---|---|
sendfile. SendAsync | Bkz. temsilci imzası | İstek Başına |
Opak v0.3.0
Anahtar | Değer (tür) | Açıklama |
---|---|---|
donuk. Sürüm | String |
|
donuk. Yükseltmek | OpaqueUpgrade |
Bkz. temsilci imzası |
donuk. Dere | Stream |
|
donuk. CallCancelled | CancellationToken |
WebSocket v0.3.0
Anahtar | Değer (tür) | Açıklama |
---|---|---|
websocket. Sürüm | String |
|
websocket. Almak | WebSocketAccept |
Bkz. temsilci imzası |
websocket. AcceptAlt | Belirtimsiz | |
websocket. AltProtocol | String |
Bkz. RFC6455 Bölüm 4.2.2 Adım 5.5 |
websocket. SendAsync | WebSocketSendAsync |
Bkz. temsilci imzası |
websocket. ReceiveAsync | WebSocketReceiveAsync |
Bkz. temsilci imzası |
websocket. CloseAsync | WebSocketCloseAsync |
Bkz. temsilci imzası |
websocket. CallCancelled | CancellationToken |
|
websocket. ClientCloseStatus | int |
İsteğe bağlı |
websocket. ClientCloseDescription | String |
İsteğe bağlı |
Ek kaynaklar
ASP.NET Core