次の方法で共有


Open Web Interface for .NET (OWIN) と ASP.NET Core

作成者: Steve SmithRick Anderson

ASP.NET コア:

  • Open Web Interface for .NET (OWIN) をサポートします。
  • Microsoft.Owin.* (Katana) ライブラリの .NET Core 互換の代替機能を備えている。

OWIN により、Web アプリを Web サーバーから切り離すことが可能になります。 ミドルウェアをパイプラインで使用し、要求と関連する応答を処理するための標準的な方法を定義します。 ASP.NET Core アプリケーションとミドルウェアは、OWIN ベースのアプリケーション、サーバー、およびミドルウェアと相互運用できます。

OWIN には、さまざまなオブジェクト モデルを使用する 2 つのフレームワークを併用できる分離レイヤーがあります。 Microsoft.AspNetCore.Owin パッケージには 2 つのアダプター実装が用意されています。

  • ASP.NET Core から OWIN へ
  • OWIN から ASP.NET Core へ

これにより、ASP.NET Core を OWIN 互換のサーバー/ホスト上でホストするか、他の OWIN 互換コンポーネントを ASP.NET Core 上で実行することができます。

これらのアダプターを使用すると、パフォーマンスが低下します。 ASP.NET Core コンポーネントのみを使用するアプリケーションでは、Microsoft.AspNetCore.Owin パッケージまたはアダプターを使用しないでください。

サンプル コードを表示またはダウンロードする (ダウンロード方法)

ASP.NET Core パイプラインで OWIN ミドルウェアを実行する

ASP.NET Core の OWIN のサポートは、Microsoft.AspNetCore.Owin パッケージの一部として展開されます。 このパッケージをインストールすることで、OWIN のサポートをプロジェクトにインポートできます。

OWIN ミドルウェアは、 インターフェイスと特定のキー (Func<IDictionary<string, object>, Task> など) の設定を必須とする owin.ResponseBodyに準拠しています。 次の単純な OWIN ミドルウェアを実行すると "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);
}

サンプル署名は Task を返し、OWIN で必要な場合に IDictionary<string, object> を受け取ります。

次のコードは、OwinHello 拡張メソッドを使用して ASP.NET Core パイプラインに UseOwin ミドルウェア (上の図) を追加する方法を示しています。

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

OWIN パイプライン内で実行する他のアクションを構成できます。

応答ヘッダーは、応答ストリームへの最初の書き込み前にのみ変更してください。

パフォーマンス上の理由から、UseOwin を複数回、呼び出すことは避けてください。 OWIN コンポーネントは、グループ化されている場合に最適に動作します。

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

OWIN 環境

HttpContext を使用して OWIN 環境を構築できます。


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

OWIN キー

OWIN は、HTTP 要求/応答の交換を通じて情報を伝達するために IDictionary<string,object> オブジェクトに依存しています。 ASP.NET Core は次のキーを実装しています。 主な仕様、拡張機能、OWIN キー ガイドラインと共通キーを参照してください。

要求データ (OWIN v1.0.0)

値 (型) 説明
owin。RequestScheme String
owin。RequestMethod String
オーウィン。RequestPathBase(リクエストパスベース) String
owin。RequestPath String
owin。RequestQueryString String
owin。RequestProtocol String
owin。RequestHeaders IDictionary<string,string[]>
オーウィン。リクエストボディ Stream

要求データ (OWIN v1.1.0)

値 (型) 説明
オーウィン。リクエストID String オプション

応答データ (OWIN v1.0.0)

値 (型) 説明
owin。ResponseStatusCode int オプション
オーウィン。レスポンスリーズンフレーズ String オプション
owin。ResponseHeaders IDictionary<string,string[]>
owin。ResponseBody Stream

その他のデータ (OWIN v1.0.0)

値 (型) 説明
owin。CallCancelled CancellationToken
オーウィン。バージョン String

共通キー

値 (型) 説明
SSLです。クライアント証明書 X509Certificate
SSLです。LoadClientCertAsync Func<Task>
サーバー。RemoteIpAddress String
サーバー。RemotePort String
サーバー。LocalIpAddress String
サーバー。ローカルポート String
サーバー。OnSendingHeaders Action<Action<object>,object>

SendFiles v0.3.0

値 (型) 説明
sendファイル。センダブル デリゲート署名を表示する 要求ごと

不透明 v0.3.0

値 (型) 説明
オペーク。バージョン String
オペーク。アップグレード OpaqueUpgrade デリゲート署名を表示する
オペークストリーム Stream
オペーク。CallCancelled CancellationToken

WebSocket v0.3.0 (英語)

値 (型) 説明
websocket・バージョン String
websocketを受け入れる WebSocketAccept デリゲート署名を表示する
websocket。AcceptAlt 記述なし
websocketです。サブプロトコル String RFC6455セクション 4.2.2 手順 5.5 を参照してください。
websocketです。センダブル WebSocketSendAsync デリゲート署名を表示する
websocketです。ReceiveAsync WebSocketReceiveAsync デリゲート署名を表示する
websocketです。CloseAsync (英語) WebSocketCloseAsync デリゲート署名を表示する
websocket。CallCancelled CancellationToken
websocketです。クライアントクローズステータス int オプション
websocketです。ClientCloseDescription (クライアントクローズの説明) String オプション

その他の技術情報