web-dev-qa-db-ja.com

ASP.NET CoreミドルウェアまたはOWINミドルウェア?

私が理解しているように、ASP.NET Coreは、独自のネイティブミドルウェアに加えて、(app.UseOwin()を介して)OWINミドルウェアをサポートしています。

ASP.NET CoreミドルウェアとOWINミドルウェアの違いは何ですか?

新しいミドルウェアを設計するときに、ASP.NET CoreミドルウェアとOWINミドルウェアのどちらとして設計する必要があるかをどのようにして知ることができますか?

23
Fred

あなたの質問は私に好奇心をそそられました。私がこれまでに学んだことを共有したいと思います。

KatanaはOWIN仕様の実装です。 Katanaのバージョン3.0以降、このテクノロジーは、今日ASP.NET Coreとして知られているWebスタックに完全に統合されました。

この移行の多くはOWIN仕様と同じままです。いくつかの変更が行われていますが。 ASP.NET Coreで既存のOWINミドルウェアを使用するには、オプション機能( "app.UseOwin()")でOWINをサポートします。

ミドルウェアのASP.NETアプリとASP.NETコアアプリをターゲットにしたい場合は、OWINミドルウェアを使用します。 ASP.NET Core開発者にファーストクラスの市民体験を提供したい場合、ASP.NET Coreミドルウェアはより「適切」であると認識されます。

ASP.NET CoreミドルウェアとOWINミドルウェアの関係についての情報は、次の場所にあります。

18
Ralf Bönning

私はそれをこのように理解するようになりました。 ASP.NET Coreミドルウェアは、低いレベルにあるOWINミドルウェアより高いレベルにあります。

ASP.NET Coreミドルウェアには、使用できる HttpContext が渡されるため、ミドルウェアの開発がはるかに簡単になるという利点があります。欠点は、開発するミドルウェアがASP.NET Coreに依存していることです。

OWINは下位レベルにあり、IDictionary<string, object>であるOWIN環境を取得します。利点は、ASP.NETに関連付けられていないため、どのOWINサーバー(Nowinなど)でも実行できることです。欠点は、OWIN環境から独自のコンテキストを構築するか、OWIN環境ディクショナリを直接使用してすべての OWINキー とオブジェクトを追跡する必要があるため、コーディングに多くの労力が必要になることです。

編集:OWINキーを自分で追跡する必要はありません。OwinEnvironmentクラスを使用して、厳密に型指定された環境を取得できます。

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